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

设计模式-建造者模式(05)

时间:2017-11-17 14:59:25      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:应用   present   const   from   return   方法   实例   java   模块   

定义

  建造者模式(Builder Pattern)也叫做生成器模式。英文原话是:Separate the construction of a complex object from its representation so that the same construction process can create different representations.意思是:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

  在建造者模式中,可以分为四个角色:

  1.抽象建造者(Builder)角色:该角色用于规范产品的各个组成部分,并进行抽象,一般独立于应用程序的逻辑。
  2.具体建造者(Concrete Builder)角色:该角色实现抽象建造者中定义的所有方法,并且返回一个组建好的产品实例。
  3.产品(Product)角色:该角色是建造中的复杂对象,一个系统中会有多个产品类,这些产品类并不一定有共同的接口,可以是完全不相关联的。
  4.导演者(Director)角色:该角色负责安排已有模块的顺序,然后告诉Builder开始建造。

/**
 * 抽象建造者角色(Builder)
 * 规范产品的组成部分
 */
public abstract class Builder {
    //设置产品的部分部分,以获得不同的产品
    public abstract void setPart1();
    public abstract void setPart2();
    public abstract void setPart3();
    //...更多部件限制
    //建造产品
    public abstract Product builderProduct();
}

/**
 * 具体建造者(Concrete Builder)
 * 实现建造者中定义的方法,并且返回一个组建好的产品实例.
 */
public class ConcreteBuilder extends Builder {
    private Product product = new Product();
    //设置产品零件
    @Override
    public void setPart1() {
        //为product产品安装部件1
    }
    @Override
    public void setPart2() {
        //为product产品安装部件2
    }
    @Override
    public void setPart3() {
        //为product产品安装部件3
    }
    //...其他部件
    //建造一个产品
    @Override
    public Product builderProduct() {
        return product;
    }
}

/**
 * 产品角色(Product)
 * 一个建造者模式可以有多个产品,并且可以是完全不相关联的
 */
public class Product {
    //产品类的业务处理方法
}

/**
 * 导演者角色(Director)
 * 负责调用具体建造者的方法,告诉Builder开始建造
 */
public class Director {
    private Builder builder = new ConcreteBuilder();
    //构造产品,负责调用各个零件构造方法
    public Product build(){
        builder.setPart1();
        builder.setPart2();
        builder.setPart3();
        //...其他部件
        return builder.builderProduct();
    }
}

源码

建造者模式的优点

  1.封装性,使用建造者模式可以使客户端不必知道产品内部组成的细节。
  2.建造者独立,容易拓展。
  3.便于控制细节风险。由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他模块产生任何影响。

建造者模式的使用场景

  1.当采用相同的方法,不同的执行顺序,产生不同的结果时,可以采用建造者模式实现。
  2.多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时,则可以使用该模式。
  3.当产品类非常复杂,或者产品类中的方法调用顺序不同产生了不同的效能时,使用建造者模式。
  4.当在对象创建过程中会使用到系统的一些其他对象,而这些对象在产品的创建过程中不易得到时,也可以采用建造者模式封装该对象的创建过程。这种场景只能是一个补偿方法,因为一个对象不容易获得,而在设计阶段没有发现,却要通过建造者封装创建过程,本身已经违反设计的最初目标。

建造者模式关注的是零件类型和转配工艺顺序,这是它与工厂方法模式最大的不同之处,虽然同为创建类模式,但是重点不同。

设计模式-建造者模式(05)

标签:应用   present   const   from   return   方法   实例   java   模块   

原文地址:http://www.cnblogs.com/aeolian/p/7846928.html

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