设计模式是一种在软件设计中广泛应用的概念,它们代表了解决特定问题或实现特定功能的经验性最佳实践和通用解决方案。设计模式是经过反复验证和测试的,可以帮助开发人员更有效地解决常见的设计问题,提高代码的可维护性、可扩展性和可重用性。
设计模式可以分为三个主要类别:创建型、结构型和行为型。创建型设计模式关注对象的创建机制,结构型设计模式关注类和对象的组合方式,而行为型设计模式关注对象之间的通信和协作方式。在这些类别中,存在许多常见的设计模式.
🌊 关注我不迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎在评论区留言,我一般看到都会回复的。大家点赞支持一下哟~ 💗
建造者模式是一种软件设计模式,它用于将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式通常用于创建复杂对象,它包含多个部分,每个部分可以有不同的组成方式。
一个类计算机类Computer包括以下变量
而其他3个是可选参数
第一种主要是使用及阅读不方便。当调用一个类的构造函数时, 首先要决定使用哪一个,里面参数又很多,参数的类型也不一样,
这样很容易搞混
在构建过程中对象的状态容易发生变化,造成错误。
因为那个类中的属性是分步设置的,所以就容易出错。
在软件开发过程中有时需要创建一个复杂的对象,这个复杂对象通常由多个子部件按一定的步骤组合而成。 产品都是由多个部件构成的,各个部件可以灵活选择,但其创建步骤都大同小异。
这类产品的创建无法用前面介绍的工厂模式描述,只有建造者模式可以很好地描述该类产品的创建。
/**
* 产品 计算机
*
* @author yang shuai
* @date 2022/12/4
*/
public class Computer {
private final String cpu;// 必须
private final String ram;// 必须
private int usbCount;// 可选
private String keyboard;// 可选
private String display;// 可选
public Computer(String cpu, String ram) {
this.cpu = cpu;
this.ram = ram;
}
public void setUsbCount(int usbCount) {
this.usbCount = usbCount;
}
public void setKeyboard(String keyboard) {
this.keyboard = keyboard;
}
public void setDisplay(String display) {
this.display = display;
}
@Override
public String toString() {
return "Computer{" + "cpu='" + cpu + '\'' + ", ram='" + ram + '\'' + ", usbCount=" + usbCount + ", keyboard='" + keyboard + '\'' + ", display='" + display + '\'' + '}';
}
}
public abstract class ComputerBuilder {
public abstract void buildCount(int usbCount);
public abstract void buildKeyboard(String keyBoard);
public abstract void buildDisplay(String display);
public abstract Computer makeComputer();
}
public class HWComputerBuilder extends ComputerBuilder{
private Computer computer;
public HWComputerBuilder(String cpu, String ram) {
computer=new Computer(cpu,ram);
}
@Override
public void buildCount(int usbCount) {
computer.setUsbCount(usbCount);
}
@Override
public void buildKeyboard(String keyBoard) {
computer.setKeyboard(keyBoard);
}
@Override
public void buildDisplay(String display) {
computer.setDisplay(display);
}
@Override
public Computer makeComputer() {
return computer;
}
}
public class ComputerDirector {
private ComputerBuilder builder;
public void setBuilder(ComputerBuilder builder) {
this.builder = builder;
}
public Computer makeComputer(int useCount,String display,String keyBoard){
builder.buildCount(useCount);
builder.buildDisplay(display);
builder.buildKeyboard(keyBoard);
return builder.makeComputer();
}
}
指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。 它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。即产品的组成部分是不变的,但每一部分是可以灵活选择的。
封装性好,构建和表示分离。 扩展性好,各个具体的建造者相互独立,有利于系统的解耦。
客户端不必知道产品内部组成的细节,建造者可以对创建过程逐步细化,而不对其它模块产生任何影响,便于控制细节风险。
解决产生多余的Builder对象等
在Computer 中创建一个静态内部类 Builder,然后将Computer 中的参数都复制到Builder类中。
示例:
/**
* 使用静态内部类构造数据
*
* @author yang shuai
* @date 2022/12/9
*/
public class Computer {
private final String cpu;//必须
private final String ram;//必须
private final int usbCount;//可选
private final String keyboard;//可选
private final String display;//可选
@Override
public String toString() {
return "Computer{" + "cpu='" + cpu + '\'' + ", ram='" + ram + '\'' + ", usbCount=" + usbCount + ", keyboard='" + keyboard + '\'' + ", display='" + display + '\'' + '}';
}
private Computer(Builder computerBuilder) {
this.cpu = computerBuilder.cpu;
this.ram = computerBuilder.ram;
this.usbCount = computerBuilder.usbCount;
this.keyboard = computerBuilder.keyboard;
this.display = computerBuilder.display;
}
public static class Builder {
private final String cpu;//必须
private final String ram;//必须
private int usbCount;//可选
private String keyboard;//可选
private String display;//可选
public Builder(String cup, String ram) {
this.cpu = cup;
this.ram = ram;
}
public Builder buildUsbCount(int usbCount) {
this.usbCount = usbCount;
return this;
}
public Builder buildKeyboard(String keyboard) {
this.keyboard = keyboard;
return this;
}
public Builder buildDisplay(String display) {
this.display = display;
return this;
}
public Computer build() {
return new Computer(this);
}
}
}
如果一个对象有非常复杂的内部结构(很多属性) 想把复杂对象的创建和使用分离
用来创建复杂的复合对象
MyBatis 中 SqlSessionFactoryBuiler 类用到了建造者模式。且在 MyBatis 中 SqlSessionFactory是由 SqlSessionFactoryBuilder 产生的
XMLConfigBuilder 负责 Configuration 各个组件的创建和装配,整个装配的流程化过程如下:
XMLConfigBuilder 负责创建复杂对象 Configuration,其实就是一个具体建造者角色。
SqlSessionFactoryBuilder 只不过是做了一层封装去构建 SqlSessionFactory 实例,这就是建造者模式简化构建的过程。
本期结束咱们下次再见👋~
🌊 关注我不迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎在评论区留言,我一般看到都会回复的。大家点赞支持一下哟~ 💗
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。