概括
解析
形象比喻:
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 -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 -7-18* @version V1.0 */package designptn.builder;public interface IProductBuilder {void buildHead();void buildBody();void buildFoot();Product buildProduct();}
/** * @author oscar999 * @date -7-18* @version V1.0 */package designptn.builder;public class SoftwareBuilder implements IProductBuilder {Product product;public SoftwareBuilder(){product = new Product();}@Overridepublic void buildHead() {// TODO Auto-generated method stubproduct.setHead("Software Head");}@Overridepublic void buildBody() {// TODO Auto-generated method stubproduct.setBody("Software Body");}@Overridepublic void buildFoot() {// TODO Auto-generated method stubproduct.setFoot("Software Foot");}@Overridepublic Product buildProduct() {// TODO Auto-generated method stubreturn product;}}
/** * @author oscar999 * @date -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 -7-18* @version V1.0 */package designptn.builder;public class TestMain {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubProductDirector pd = new ProductDirector();Product product = pd.constructProduct(new SoftwareBuilder());System.out.println(product.getHead());System.out.println(product.getBody());System.out.println(product.getFoot());}}
一言蔽之,就是不直接实例化需要的类,而是通过构造器构建。
如果觉得《[设计模式-创建型]建造者(Builder)》对你有帮助,请点赞、收藏,并留下你的观点哦!