[设计模式-创建型]建造者(Builder)
2013-07-18 09:05
423 查看
概括
名称 | Builder |
结构 | |
动机 | 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 |
适用性 | 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。 当构造过程必须允许被构造的对象有不同的表示时。 |
解析
形象比喻:BUILDER—MM最爱听的就是“我爱你”这句话了,见到不同地方的MM,要能够用她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种语言都有一个按键,见到MM我只要按对应的键,它就能够用相应的语言说出“我爱你”这句话了,国外的MM也可以轻松搞定,这就是我的“我爱你”builder。(这一定比美军在伊拉克用的翻译机好卖)
建造模式:将对象的内部表象和对象的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。
1.Builder
为创建一个Product对象的各个部件指定抽象接口。
2.ConcreteBuilder
实现Builder的接口以构造和装配该产品的各个部件。
定义并明确它所创建的表示。
提供一个检索产品的接口。
3.Director
构造一个使用Builder接口的对象。
4.Product
表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程。
包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
实例
涉及的文件有IProductBuilder.java
- SoftwareBuilder.java
Product.java
ProductDirector.java
TestMain.java
Product 是一个产品类,是一个简单的java bean, 包含一些属性及对应的set ,get 方法。
IProductBuilder和SoftwareBuilder, 构造器的接口和实现类, 定义有一些方法实例化特定的 Product。
ProductDirector 使用Builder并调用相关方法返回构造的Product.
/** * @author oscar999 * @date 2013-7-18 * @version V1.0 */ package designptn.builder; public class Product { private String head; private String body; private String foot; /** * @return the head */ public String getHead() { return head; } /** * @param head * the head to set */ public void setHead(String head) { this.head = head; } /** * @return the body */ public String getBody() { return body; } /** * @param body * the body to set */ public void setBody(String body) { this.body = body; } /** * @return the foot */ public String getFoot() { return foot; } /** * @param foot * the foot to set */ public void setFoot(String foot) { this.foot = foot; } }
/** * @author oscar999 * @date 2013-7-18 * @version V1.0 */ package designptn.builder; public interface IProductBuilder { void buildHead(); void buildBody(); void buildFoot(); Product buildProduct(); }
/** * @author oscar999 * @date 2013-7-18 * @version V1.0 */ package designptn.builder; public class SoftwareBuilder implements IProductBuilder { Product product; public SoftwareBuilder(){ product = new Product(); } @Override public void buildHead() { // TODO Auto-generated method stub product.setHead("Software Head"); } @Override public void buildBody() { // TODO Auto-generated method stub product.setBody("Software Body"); } @Override public void buildFoot() { // TODO Auto-generated method stub product.setFoot("Software Foot"); } @Override public Product buildProduct() { // TODO Auto-generated method stub return product; } }
/** * @author oscar999 * @date 2013-7-18 * @version V1.0 */ package designptn.builder; public class ProductDirector { public Product constructProduct(SoftwareBuilder pb) { pb.buildHead(); pb.buildBody(); pb.buildFoot(); return pb.buildProduct(); } }
/** * @author oscar999 * @date 2013-7-18 * @version V1.0 */ package designptn.builder; public class TestMain { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub ProductDirector pd = new ProductDirector(); Product product = pd.constructProduct(new SoftwareBuilder()); System.out.println(product.getHead()); System.out.println(product.getBody()); System.out.println(product.getFoot()); } }
一言蔽之,就是不直接实例化需要的类,而是通过构造器构建。
相关文章推荐
- Java设计模式(5)——创建型模式之建造者模式(Builder)
- C++设计模式 -> 创建型 -> 建造者(Builder)
- [设计模式-创建型]建造者(Builder)
- 设计模式(三):建造者模式Builder(创建型模式)
- PHP设计模式:创建型之建造者(Builder)
- C#设计模式之五建造者模式(Builder)【创建型】
- 设计模式(4)-创建型-建造者(Builder)(个人笔记)
- 第六篇、创建型设计模式——建造者(Builder)模式/生成器模式
- 设计模式之建造者模式Builder(创建型)
- 设计模式之建造者模式(Builder Pattern)
- 设计模式 : 创建型模式——建造者模式
- 设计模式理解(三)创建型——建造者
- JAVA设计模式(04):创建型-建造模式(Builder)
- 设计模式——创建型设计模式总结(简单工厂、普通工厂、抽象工厂、建造者、原型和单例)
- 设计模式(二):创建型模式—Builder(生成器)
- 创建型模式之建造者模式(Builder)
- 设计模式学习笔记——建造者(Builder)模式
- IOS设计模式浅析之建造者模式(Builder)
- 设计模式:建造者模式(Builder)
- GoF23种设计模式之创建型模式之建造者模式