1.前言
- 设计模式共有23种(点击这里查看更多分类),根据目的准则分类,分为三类
- 创建型设计模式,共5种:单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。
- 结构型设计模式,共7中:适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、响元模式。
- 行为设计模式,共11种:策略模式、模版方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
- 这里介绍一下建造者模式。
2.特点
- 定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.
- 解释:建造者模式有如下几种角色
Director:导演类,负责安排已有模块的顺序,然后通知Build开始建造
Builder:抽象Builder类,规范产品的组建,一般由子类实现。
ConcreteBuilder:具体建造者,实现抽象Builder类定义的所有方法,并且返回一个组建好的对象。
Product:产品类
2.1.代码说明
创建产品类,如下:
public class Computer {
private String cpu;
private String mainBoard;
private String ram;
public void setCpu(String cpu) {
this.cpu = cpu;
}
public void setMainBoard(String mainBoard) {
this.mainBoard = mainBoard;
}
public void setRam(String ram) {
this.ram = ram;
}
}
创建Builder类规范产品组建,如下:
public abstract class Builder {
public abstract void buildCpu(String cpu);
public abstract void buildMainBoard(String mainBoard);
public abstract void buildRam(String ram);
public abstract Computer create();
}
实现抽象Builder类,如下:
public class MoonComputerBuilder extends Builder {
private Computer mComputer = new Computer();
@Override
public void buildCpu(String cpu) {
mComputer.setCpu(cpu);
}
@Override
public void buildMainBoard(String mainBoard) {
mComputer.setMainBoard(mainBoard);
}
@Override
public void buildRam(String ram) {
mComputer.setRam(ram);
}
@Override
public Computer create() {
return mComputer;
}
}
用导演类来统一组装过程,如下:
public class Director {
Builder mBuilder = null;
public Director(Builder builder) {
this.mBuilder = builder;
}
public Computer CreateComputer(String cpu,String mainBoard,String ram){
mBuilder.buildCpu(cpu);
mBuilder.buildMainBoard(mainBoard);
mBuilder.buildRam(ram);
return mBuilder.create();
}
}
最终调用导演类,如下:
Builder builder = new MoonComputerBuilder();
Director director = new Director(builder);
director.CreateComputer("i7-6700","华擎玩家至尊","三星DDR4");
2.2.优缺点
- 优点:1⃣️使用建造者模式可以使客户端不必知道产品内部组成端细节。2⃣️具体端建造者类之间是相互独立端,容易扩展。3⃣️由于具体端建造者是独立的,因此可以对建造过程逐步细化,而不会对其他模块产生影响。
- 缺点:1⃣️产品必须有共同点,范围有限制。2⃣️如内部变化复杂,会有很多的建造类。
2.3.使用场景
- 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
- 需要生成的对象具有复杂的内部结构。
- 多个零件或部件都可以被装配到一个对象中,但产生的运行效果又不相同时。
- 需要生成的对象内部属性本身相互依赖。
3.总结
有疑问可以留言!
4.最后
开通了个公众号,扫码关注一下,可以及时收到我分享的内容哦!