网站网站/东莞最新消息 今天
UML图:
思路:
指挥者类Director,该类的作用主要有两个:一方面它隔离了客户与生产过程;另一方面它负责控制产品的生成过程。
优点:
客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象。
用户使用不同的具体建造者即可得到不同的产品对象。
可以更加精细地控制产品的创建过程。
增加新的具体建造者无须修改原有类库的代码,指挥者类针对抽象建造者类编程,系统扩展方便,符合“开闭原则”。
缺点:
如果产品之间的差异性很大,则不适合使用建造者模式,因此其使用范围受到一定的限制。
如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大。
代码实现:
package creative_software_design_pattern.text.Builder;public class Product {private String A;private String B;private String C;public String getA() {return A;}public void setA(String a) {A = a;}public String getB() {return B;}public void setB(String b) {B = b;}public String getC() {return C;}public void setC(String c) {C = c;}
}
package creative_software_design_pattern.text.Builder;public abstract class pBuilder {Product product = new Product();public abstract void setA();public abstract void setB();public abstract void setC();public Product re(){return product;}
}
package creative_software_design_pattern.text.Builder;public class create extends pBuilder{@Overridepublic void setA() {product.setA("AAAA");}@Overridepublic void setB() {product.setB("bbbbb");}@Overridepublic void setC() {product.setC("SSS");}
}
package creative_software_design_pattern.text.Builder;public class DIRECT {pBuilder builder;public DIRECT(pBuilder builder) {this.builder = builder;}public Product re(){builder.setA();builder.setB();builder.setC();return builder.re();}
}
package creative_software_design_pattern.text.Builder;public class client {public static void main(String[] args) {pBuilder builder = new create();DIRECT direct = new DIRECT(builder);Product product = direct.re();System.out.println(product.getA()+product.getB()+product.getC());}
}