博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式<七>建造者模式
阅读量:2401 次
发布时间:2019-05-10

本文共 2875 字,大约阅读时间需要 9 分钟。

建造者模式的基本概念

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

或者说,用户只需要知道他需要什么,而不需要知道这个东西的具体是怎样创造出来的 。
他与工厂模式的区别在于,他们都封装了具体的创建过程,建造者模式是一个产品的不同生产过程,而工厂模式提供的是不同的产品。

什么时候用建造者模式

建造者模式在这样的情况下使用:

1.当产品类的内部结构较复杂,不容易构建或易出错。
2.产品之间的属性相互依赖,即对产品的构造顺序有要求,如人要先有肚子才有手。

建造者模式怎么用

建造者模式有这样4钟角色:

1.一个复杂的产品类。
2.一个抽象类其内约束了产品的构造方式,并有一个返回产品的方法。
3.继承抽象类的具体实现类,用来进行具体的构造。
4.指导者类控制产品的生产顺序并返回。

如果我们需要一个人类,人有手有脚有肚子有脑袋等等…

简单创建这样一个类

/** * @author : cjd * @Description : 人类 * @create : 2018-01-23 13:19 **/public class Person {
private String head ; private String tummy; private String hand; private String foot; public String getHead() { return head; } public void setHead(String head) { this.head = head; } public String getTummy() { return tummy; } public void setTummy(String tummy) { this.tummy = tummy; } public String getHand() { return hand; } public void setHand(String hand) { this.hand = hand; } public String getFoot() { return foot; } public void setFoot(String foot) { this.foot = foot; }}

然后创建一个抽象构建类,这个类约束了创建人类需要有各种部件,

在这里即set方法,以及一个获取的方法:

/** * @author : cjd * @Description : 抽象人类构建类 * @create : 2018-01-23 13:35 **/public abstract class PersonBuilder {
Person person = new Person(); public abstract void buildHead(); public abstract void buildTummy(); public abstract void buildHand(); public abstract void buildFoot(); public Person getPerson() { return person; }}

建造者模式就是对一个产品的不同建造方式,所以我们需要一个比较胖的人的时候,就需要创建这样的一个类,同理得瘦的人的创建。

/** * @author : cjd * @Description : 肥的人 * @create : 2018-01-23 13:38 **/public class FatPerson extends  PersonBuilder {
@Override public void buildHead() { person.setHead("小脑袋"); } @Override public void buildTummy() { person.setTummy("大屁股"); } @Override public void buildHand() { person.setHand("细手"); } @Override public void buildFoot() { person.setFoot("肥腿"); }}

最后这一系列的构建需要通过指挥者来调用:

/** * @author : cjd * @Description : 指挥者类 * @create : 2018-01-23 13:46 **/public class PersonDirector {
public Person constructPerson(PersonBuilder pb) { //画头画肚子画手画脚 pb.buildHead(); pb.buildTummy(); pb.buildHand(); pb.buildFoot(); return pb.getPerson(); }}

客户端只需要这样进行调用就可以直接得到人类并通过一系列构造得到的胖的人:

/** * @author : cjd * @Description :主函数 * @create : 2018-01-23 13:49 **/public class Main {
public static void main(String[] args) { PersonDirector pd = new PersonDirector(); Person person = pd.constructPerson(new FatPerson()); System.out.println(person.getHead()+person.getTummy()+person.getHand()+person.getFoot()+"的人"); }}

得到了小脑袋大屁股细手肥腿的人

后记

建造者模式和工厂模式都是封装了创建过程,工厂模式封装的是不同产品的创建过程,建造者模式封装的是同一产品的不同属性实现。

它与策略模式又有所不同,策略模式关注的是行为,算法的替代,建造者模式是一种创建型模式,关注的是对象的生成。

通过建造者模式创建的对象是稳定的,不会因疏忽多了或少了什么。

转载地址:http://ygiob.baihongyu.com/

你可能感兴趣的文章
数字证书,企业必备的“身份证”(转)
查看>>
安全业务:向网络核心靠拢(转)
查看>>
网络安全方面的专业词汇(转)
查看>>
特洛伊木马大揭密(转)
查看>>
亦正亦邪的远程控制软件(转)
查看>>
亲密接触远程控制(12)(转)
查看>>
亲密接触远程控制(11)(转)
查看>>
亲密接触远程控制(9)(转)
查看>>
亲密接触远程控制(8)(转)
查看>>
网络安全评测(转)
查看>>
亲密接触远程控制(5)(转)
查看>>
亲密接触远程控制(7)(转)
查看>>
网络攻防教程(转)
查看>>
亲密接触远程控制(6)(转)
查看>>
网络安全为银行提供有效保护(转)
查看>>
Cisco路由入侵艺术(转)
查看>>
信息安全与伪装技术(转)
查看>>
保护网络数据-巧用windows2000IP安全策略(转)
查看>>
防范和抵御两手都要硬(转)
查看>>
安全管理实务之四:口令管理(转)
查看>>