创建型设计模式(5):建造者模式
来源:互联网 发布:智慧云计算 编辑:程序博客网 时间:2024/06/06 02:04
定义
又叫生成器模式,它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。
当创建复杂对象的算法应该独立于该对象的组成部分时,而且构造过程必须允许被构造的对象有不同的表示时。我们可以考虑使用建造者模式。
实现
1. Builder为创建一个Product对象的各个部件指定抽象接口。通常包含创建产品和返回产品的抽象方法,也可以是具体方法,把创建过程放到ConcreteBuilder类中。
2. ConcreteBuilder 实现Builder的接口以构造和装配该产品的各个部件。
3. Director负责调用适当的建造者来组建产品,导演类一般不与产品类发生依赖关系,与导演类直接交互的是建造者类。
4. Product表示被构造的复杂对象。ConcreateBuilder创建该产品的内部表示并定义它的装配过程。
/** "Product" */ class Pizza { private String dough = ""; private String sauce = ""; private String topping = ""; public void setDough (String dough) { this.dough = dough; } public void setSauce (String sauce) { this.sauce = sauce; } public void setTopping (String topping) { this.topping = topping; } } ''/** "Abstract Builder" */'' abstract class PizzaBuilder { protected Pizza pizza; public Pizza getPizza() { return pizza; } public void createNewPizzaProduct() { pizza = new Pizza(); } public abstract void buildDough(); public abstract void buildSauce(); public abstract void buildTopping(); } /** "ConcreteBuilder" */ class HawaiianPizzaBuilder extends PizzaBuilder { public void buildDough() { pizza.setDough("cross"); } public void buildSauce() { pizza.setSauce("mild"); } public void buildTopping() { pizza.setTopping("ham+pineapple"); } } /** "ConcreteBuilder" */ class SpicyPizzaBuilder extends PizzaBuilder { public void buildDough() { pizza.setDough("pan baked"); } public void buildSauce() { pizza.setSauce("hot"); } public void buildTopping() { pizza.setTopping("pepperoni+salami"); } } ''/** "Director" */'' class Waiter { private PizzaBuilder pizzaBuilder; public void setPizzaBuilder (PizzaBuilder pb) { pizzaBuilder = pb; } public Pizza getPizza() { return pizzaBuilder.getPizza(); } public void constructPizza() { pizzaBuilder.createNewPizzaProduct(); pizzaBuilder.buildDough(); pizzaBuilder.buildSauce(); pizzaBuilder.buildTopping(); } } /** A customer ordering a pizza. */ class BuilderExample { public static void main(String[] args) { Waiter waiter = new Waiter(); PizzaBuilder hawaiian_pizzabuilder = new HawaiianPizzaBuilder(); PizzaBuilder spicy_pizzabuilder = new SpicyPizzaBuilder(); waiter.setPizzaBuilder ( hawaiian_pizzabuilder ); waiter.constructPizza(); Pizza pizza = waiter.getPizza(); } }
客户创建Director对象,并用它所想要的Builder对象进行配置。Director取得客户的请求创建产品,最后取得产品。
优点
1. 可以对构造对象的过程进行精细的控制,以产生不同的产品对象。
2. 便于扩展,有新的产品时,只需增加新的ConcreteBuilder 就可以实现。
相关模式
抽象工厂模式与生成器相似,因为它也可以创建复杂对象。主要的区别是生成器模式着重于一步步构造一个复杂对象。而抽象工厂模式着重于多个系列的产品对象(简单的或是复杂的)。
生成器在最后的一步返回产品,而对于抽象工厂来说,产品是立即返回的。
参考
http://www.oodesign.com/builder-pattern.html
http://zh.wikipedia.org/wiki/%E7%94%9F%E6%88%90%E5%99%A8%E6%A8%A1%E5%BC%8F
- 创建型设计模式(5):建造者模式
- 创建型设计模式-建造者模式
- 设计模式(三)建造者模式(创建型)
- 设计模式--建造者模式Builder(创建型)
- 设计模式-创建型-建造者模式(Builder)
- 【JavaScript设计模式】创建型设计模式--建造者模式
- 设计模式复习笔记 (5)创建型模式:建造者模式
- (5)设计模式之建造者模式(创建型模式)
- [设计模式-创建型]建造者(Builder)
- 设计模式-创建型04-建造者
- 创建型设计-建造者模式
- (C++设计模式) ------建造者模式Builder -- 创建型模式
- 设计模式-创建型模式#建造者模式Builder
- 设计模式 - 创建型模式 - 建造者模式
- 设计模式之创建型模式---建造者模式
- 设计模式->创建型模式->建造者模式
- Java设计模式之创建型模式--建造者模式
- 【23种设计模式】创建型模式 > 建造者模式
- apue-alarm和pause函数,关于信号
- 父窗口和子窗口同时移动问题?
- magento搬家
- OracleDBConsoleorcl无法启动_错误代码2的解决
- 求连续子数组最大和,两种算法
- 创建型设计模式(5):建造者模式
- linux下mysql的安装配置
- Android-----WebView使用
- 刷新 前进 后退 js代码
- jboss-5.1.0.GA启动问题 AttachmentStore IllegalArgumentException
- tcpdump 参数简要说明
- Java 反射的简单示例
- 创建型设计模式(6):原型模式
- 我的Android进阶之旅------>android异步加载图片显示,并且对图片进行缓存实例