本文共 2792 字,大约阅读时间需要 9 分钟。
什么是建造者模式:建造者模式是设计模式的一种,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式优点:
- 在建造者模式中,客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,相同的建造过程可以创建不同的产品对象 - 使用的不同的具体建造者就可以得到不同的产品对象,具体建造者之间相互独立 - 可以更加惊喜的控制产品的创建过程 - 增加新的具体建造者无需修改原有的类库代码,指挥者类针对抽象建造者类编程,符合“开闭原则”
例子:比喻我们构建一个人类
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();}
/*这个高智商的造人过程自然是实现了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()); }}
结果:
转载地址:http://nahgn.baihongyu.com/