建造者模式
[转自恩师wanson]
优点:
1:在建造者模式中,客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同产品对象
2:每一个具体建造者都相对独立,而与其他的具体建造者无关,因此可以很方便地替换具体建造者或增加新的具体建造者,用户使用不同的具体建造者即可得到不同的产品对象,符合开闭原则
3:可以更加精细地控制产品的创建过程
缺点:
1:建造者模式所创建的产品一般具有较多的共同点,其组成部分相似,如果产品之间的差异性很大,例如很多组成部分都不相同,不适合使用建造者模式,因此适用范围受到一定的限制
2:如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大,增加系统的理解难度和运行成本。
使用环境:
1:需要生成的产品对象有复杂的内部结构,这些产品对象通常包含多个成员变量
2:需要生成的产品对象的属性相互依赖,需要指定其生成顺序
3:对象创建过程独立于创建该对象的类。
4:隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品
1 package com.shanghai.wangson.designpattern; 2 3 /** 4 * 抽象建造者 5 */ 6 abstract class Builder { 7 /** 8 * 创建产品对象 9 */ 10 protected Product product=new Product(); 11 public abstract void builderPartA(); 12 public abstract void builderPartB(); 13 public abstract void builderPartC(); 14 /** 15 * 返回产品对象 16 */ 17 public Product getResult(){ 18 return product; 19 } 20 21 }
1 package com.shanghai.wangson.designpattern; 2 3 /** 4 * 具体建造者 5 */ 6 public class ConcreteBuilder extends Builder { 7 @Override 8 public void builderPartA() { 9 product.setPartA("建造partA"); 10 } 11 12 @Override 13 public void builderPartB() { 14 product.setPartB("建造partB"); 15 } 16 17 @Override 18 public void builderPartC() { 19 product.setPartC("建造partC"); 20 } 21 }
1 package com.shanghai.wangson.designpattern; 2 3 /** 4 * 指挥者 5 */ 6 public class Director { 7 private Builder builder; 8 9 public Director(Builder builder) { 10 this.builder = builder; 11 } 12 /** 13 * 产品构建与组装方法 14 */ 15 public Product construct(){ 16 builder.builderPartA(); 17 builder.builderPartB(); 18 builder.builderPartC(); 19 return builder.getResult(); 20 } 21 }
1 package com.shanghai.wangson.designpattern; 2 3 /** 4 * 产品角色 5 */ 6 public class Product { 7 private String partA; 8 private String partB; 9 private String partC; 10 11 public void setPartA(String partA) { 12 this.partA = partA; 13 } 14 15 public void setPartB(String partB) { 16 this.partB = partB; 17 } 18 19 public void setPartC(String partC) { 20 this.partC = partC; 21 } 22 public void show(){ 23 /** 24 * 显示产品的特性 25 */ 26 System.out.println("超微牌子"); 27 } 28 }
1 package com.shanghai.wangson.designpattern; 2 3 public class Driver { 4 public static void main(String[] args) { 5 Builder builder=new ConcreteBuilder(); 6 Director director=new Director(builder); 7 Product product=director.construct(); 8 product.show(); 9 } 10 }
个人学习笔记,记录日常学习,便于查阅及加深,仅为方便个人使用。