博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java建造者模式
阅读量:3935 次
发布时间:2019-05-23

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

 

 

什么是建造者模式:建造者模式是设计模式的一种,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

 

 

建造者模式优点:

- 在建造者模式中,客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,相同的建造过程可以创建不同的产品对象
- 使用的不同的具体建造者就可以得到不同的产品对象,具体建造者之间相互独立
- 可以更加惊喜的控制产品的创建过程
- 增加新的具体建造者无需修改原有的类库代码,指挥者类针对抽象建造者类编程,符合“开闭原则”
 

 

在这样的设计模式中,有以下几个角色:
1 builder:为创建一个产品对象的各个部件指定抽象接口。
2 ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并 提供一个检索产品的接口。
3 Director:构造一个使用Builder接口的对象。
4 Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

                      

 

例子:比喻我们构建一个人类

public class Human {    private String head; //头部    private String body; //身体    private String hand; //手    private String foot; //脚    public String getHead() {        return head;    }    public void setHead(String head) {        this.head = head;    }    public String getBody() {        return body;    }    public void setBody(String body) {        this.body = body;    }    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;    }}

 

接口:一个定义了造人标准的接口

/*看,一个接口定义好了。有各种造部位的方法,最后给个createHuman方法给你返回一个我们想要造的人。现在,人的类和造人的标准我们都定义好了。那我们可以先造一个人出来,先造一个高智商的人吧。*///一个接口。一个定义了造人标准的接口。public interface IBuildHuman {  public void buildHead();  public void buildBody();  public void buildHand();  public void buildFoot();  public Human createHuman();}
看,一个接口定义好了。有各种造部位的方法,最后给个createHuman方法给你返回一个我们想要造的人。
现在,人的类和造人的标准我们都定义好了。那我们可以先造一个人出来,先造一个高智商的人吧。
 
 
 //实现接口
/*这个高智商的造人过程自然是实现了IBuildHuman这个造人标准的接口了。然后就是set方法,最后返回造好的human。*/public class SmartManBuilder implements IBuildHuman {Human human;public SmartManBuilder() {  human = new Human();}@Overridepublic void buildHead() {  human.setHead("智商180的头脑");}@Overridepublic void buildBody() {  human.setBody("新的身体");}@Overridepublic void buildHand() {  human.setHand("新的手");}@Overridepublic void buildFoot() {  human.setFoot("新的脚");}@Overridepublic Human createHuman() {  return human;  }}

这个高智商的造人过程自然是实现了IBuildHuman这个造人标准的接口了。然后就是set方法,最后返回造好的human。

 

 

创建一个director类

/*好的,其实到这里呢,我们已经完成了建造的过程。那就这么简单的建造过程,还搞了一个建造模式吗?非也。接下来,就是介绍建造者模式的精髓,那就是director。这个director呢,就是来执行我们刚才的造人动作的。没错,精髓就是我们刚才的造人动作。我们先看代码:*/public class Director {public Human createHumanByDirecotr(IBuildHuman bh){  bh.buildBody();  bh.buildFoot();  bh.buildHand();  bh.buildHead();  return bh.createHuman();  }}

 

 

//创建BuilderTest类

public class BuilderTest {public static void main(String[] args) {  Director director = new Director();  Human human =director.createHumanByDirecotr(new SmartManBuilder());  System.out.println(human.getBody());  System.out.println(human.getFoot());  System.out.println(human.getHand());  System.out.println(human.getHead());  }}

 

结果:

 

 
 
 
 
 
 
 
posted @ 2018-12-12 12:01 阅读(...) 评论(...)

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

你可能感兴趣的文章
idea中@Data标签getset不起作用
查看>>
git使用
查看>>
spring boot jpa多表查询展示实体的方法
查看>>
javanio中FileChannel写入文件write,追加文件,以及多文件合并
查看>>
jpa操作mysql乱码以及中文查询错误
查看>>
必须串行执行程序如何提高执行效率之队列方法
查看>>
@Cacheable在同一个类中方法调用不起作用
查看>>
Vysor:在电脑里控制你的安卓手机
查看>>
带时区的时间MySQL以及java中的处理
查看>>
boot中jar包部署的方式读取classes下的文件
查看>>
微服务架构的基础框架选择:Spring Cloud还是Dubbo?
查看>>
mapdb实现分析
查看>>
Spring Cloud Netflix Eureka源码导读与原理分析
查看>>
gemfire的简单了解
查看>>
pom配置之:<distributionManagement>snapshot快照库和release发布库
查看>>
Hystrix仪表盘--Unable to connect to Command Metric Stream
查看>>
文本入库特殊字符处理, 防止SQL注入
查看>>
微信公众号开发的几点总结
查看>>
spring-restdocs利用测试用例生成API文档,AsciidocFX工具整合
查看>>
秒杀抢购开发总结
查看>>