码迷,mamicode.com
首页 > 其他好文 > 详细

《大话设计模式》——建造者模式

时间:2017-09-06 16:44:02      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:logs   rtb   cto   ring   rect   void   技术   调用   alt   

建造者模式结构图

技术分享

角色:
1、builder:建造者接口。定义了建造一个产品所必须的所有流程。所有的建造者都需要实现该类,以确保实现建造一个产品所需的流程。

2、concreteBuilder:具体建造者。每一个建造者,可以创建一种产品,产品细节在建造者中定义,因此多个产品对应多个建造者。

3、product:具体产品。

4、director:指挥者。由指挥者根据需求决定调用哪个建造者生产哪种产品。

实现:

1、product

public class Product{
    List<String> parts = new List<String>();

    public void add(String part){
        parts.add(part);
    }

}

2、builder

inteface Builder{
    void partA();//这个产品有两个部分组成,partA
    void partB();//这个产品有两个部分组成,partB
    Product getProduct();
}

3、concreteBuilderA

public ConcreteBuilderA implement Builder{
    Product p = new Product();
    public void partA(){//建造A部件
        p.add("A");
    }
    public void partB(){//建造B部件
        p.add("B");
    }
    public Product getProduct(){
        return p;
    }
}

concreteBuilderB

public ConcreteBuilderB implement Builder{
    Product p = new Product();
    public void partA(){//建造A部件
        p.add("AA");
    }
    public void partB(){//建造B部件
        p.add("BB");
    }
    public Product getProduct(){
        return p;
    }
}

4、director

public Director{

    public void buildProject(Builder b){
        b.partA();
        b.partB();
    }
}

客户端

    public static void main(String[] args) {
        Director d = new Director();
                Builder b1 = new concreteBuilderA();//建造者A建造产品,产品细节为A、B
                Builder b2 = new concreteBuilderA();//建造者A建造产品,产品细节为A、B
                d.buildProduct(b1);//建造产品
                d.buildProduct(b2);//建造产品
                Product p1 = b1.getProduct();//产品1
                Product p2 = b2.getProduct();//产品2
    }

优点:

首先,建造者模式的封装性很好。使用建造者模式可以有效的封装变化,在使用建造者模式的场景中,一般产品类和建造者类是比较稳定的,因此,将主要的业务逻辑封装在导演类中对整体而言可以取得比较好的稳定性。

其次,建造者模式很容易进行扩展。如果有新的需求,通过实现一个新的建造者类就可以完成,基本上不用修改之前已经测试通过的代码,因此也就不会对原有功能引入风险。

与工厂模式区别:

建造者模式与工厂模式类似,他们都是建造者模式,适用的场景也很相似。一般来说,如果产品的建造很复杂,那么请用工厂模式;如果产品的建造更复杂,那么请用建造者模式。

 

《大话设计模式》——建造者模式

标签:logs   rtb   cto   ring   rect   void   技术   调用   alt   

原文地址:http://www.cnblogs.com/yxth/p/7485573.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!