博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
建造者模式
阅读量:5272 次
发布时间:2019-06-14

本文共 2660 字,大约阅读时间需要 8 分钟。

[转自恩师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     @Override13     public void builderPartB() {14         product.setPartB("建造partB");15     }16 17     @Override18     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 }

 

转载于:https://www.cnblogs.com/wq-9/p/10256975.html

你可能感兴趣的文章