标签:应用 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.当在对象创建过程中会使用到系统的一些其他对象,而这些对象在产品的创建过程中不易得到时,也可以采用建造者模式封装该对象的创建过程。这种场景只能是一个补偿方法,因为一个对象不容易获得,而在设计阶段没有发现,却要通过建造者封装创建过程,本身已经违反设计的最初目标。
建造者模式关注的是零件类型和转配工艺顺序,这是它与工厂方法模式最大的不同之处,虽然同为创建类模式,但是重点不同。
标签:应用 present const from return 方法 实例 java 模块
原文地址:http://www.cnblogs.com/aeolian/p/7846928.html