设计模式-建造者模式
一、建造者模式与工程模式的区别
与工厂模式对比:工厂模式就是客户端向工厂要产品,可以是相同工厂属性不同的产品,也可以是不同工厂的产品,但是建造者就是告诉监工我要的产品该怎么组装,出发点不同,建造者关注的是产品建造过程的细接不同,而工厂模式则是关注要什么样的产品,不关注细接。举个例子:好比一个要买成品,一个要定制一款。
二、建造者模式概念
建造者模式主要分四个部分:产品、抽象构造者、具体建造者、指挥者,产品就是代表复杂的对象,是建造的最终产物,产品有个特性就是大的框架不会变,而内部的细节会变动;抽象构造者就是定义构造的规范,也就是大的框架,具体构造者就是抽象构造者的实现类,就是在大的框架下实现不同的细节;指挥者就是决定我要使用那个具体建造者来构建产品。
三、建造者代码实现
//具体的产品,代表负载的对象 public class Product { private String part1; private String part2; private String part3; public Product(String part1, String part2, String part3) { this.part1 = part1; this.part2 = part2; this.part3 = part3; } public String getPart1() { return part1; } public void setPart1(String part1) { this.part1 = part1; } public String getPart2() { return part2; } public void setPart2(String part2) { this.part2 = part2; } public String getPart3() { return part3; } public void setPart3(String part3) { this.part3 = part3; } @Override public String toString() { return "Product{" + "part1='" + part1 + '\'' + ", part2='" + part2 + '\'' + ", part3='" + part3 + '\'' + '}'; } } //抽象建造者,定义大的框架 public interface Builder { public void buildPart1(String part1); public void buildPart2(String part1); public void buildPart3(String part1); public Product build(); } //具体建造者,按照框架,实现具体细节构建 public class DefaultBuilder implements Builder { private String part1; private String part2; private String part3; @Override public void buildPart1(String part1) { this.part1=part1; } @Override public void buildPart2(String part2) { this.part2=part2; } @Override public void buildPart3(String part3) { this.part3=part3; } @Override public Product build() { return new Product(this.part1,this.part2,this.part3); } } //指挥者,决定那个建造者去建造产品 public class Director { public Builder builder; public Director(Builder builder) { this.builder=builder; } public Product construct(){ builder.buildPart1("第1部分"); builder.buildPart2("第2部分"); builder.buildPart3("第3部分"); return builder.build(); } } //测试类 public class Test { public static void main(String[] args) { Builder builder=new SpecialBuilder(); Director director=new Director(builder); Product product= director.construct(); System.out.println(product); } }
四、总结
建造者模式主要是将产品的构建与表示分离,同样的构建过程,但不同的表示,建造者模式类似与抽象工厂模式+最后的test,好比抽象工厂系列产品内部实现不同,但生产的产品不变,最后由test决定使用那一系列产品来表示;而建造者模式主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。

浙公网安备 33010602011771号