失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > [设计模式-创建型]建造者(Builder)

[设计模式-创建型]建造者(Builder)

时间:2024-05-06 11:55:35

相关推荐

[设计模式-创建型]建造者(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 -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)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。