232_尚学堂_高淇_java300集最全视频教程_【GOF23设计模式】_建造者模式详解
2015-06-10 22:38
776 查看
建造者模式的概念(概念部分摘自http://www.cnblogs.com/devinzhang/archive/2012/01/06/2314670.html):
将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 [构建与表示分离,同构建不同表示]
与抽象工厂的区别:在建造者模式里,有个指导者,由指导者来管理建造者,用户是与指导者联系的,指导者联系建造者最后得到产品。即建造模式可以强制实行一种分步骤进行的建造过程。
建造模式是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心。
举个简单的例子,如汽车,有很多部件,车轮,方向盘,发动机还有各种小零件等等,部件很多,但远不止这些,如何将这些部件装配成一部汽车,这个装配过程也很复杂(需要很好的组装技术), builder模式就是为了将部件和组装分开。
(以上为摘录)
以下为根据视频学习所写的例子:
将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 [构建与表示分离,同构建不同表示]
与抽象工厂的区别:在建造者模式里,有个指导者,由指导者来管理建造者,用户是与指导者联系的,指导者联系建造者最后得到产品。即建造模式可以强制实行一种分步骤进行的建造过程。
建造模式是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心。
举个简单的例子,如汽车,有很多部件,车轮,方向盘,发动机还有各种小零件等等,部件很多,但远不止这些,如何将这些部件装配成一部汽车,这个装配过程也很复杂(需要很好的组装技术), builder模式就是为了将部件和组装分开。
(以上为摘录)
以下为根据视频学习所写的例子:
package hong.study.builder; /** * 通过创建者模式创建的飞船,可以看出暴露给用户的代码是很少的 * @author Hong * */ public class Client { public static void main(String[] args) { AirshipDirector ad = new HongAirshipDirector(); Airship as = ad.directAirship(); System.out.println(as.getEngine().getName()); } } /** 运行结果: HongEngine */
package hong.study.builder; /** * 飞船实例,包括飞船必要的部分(这里瞎写的) * 但是不同的部分如何实现是不同的 * 这里只是通过一个name作为标定不同的实现 * 不同公司的飞船都需要这些组件,但是组件会有自己公司的名字 * @author Hong * */ public class Airship { private Engine engine;//可以应用到工厂模式来生产对象 private Room room; private Toilet toilet; public Engine getEngine() { return engine; } public void setEngine(Engine engine) { this.engine = engine; } public Room getRoom() { return room; } public void setRoom(Room room) { this.room = room; } public Toilet getToilet() { return toilet; } public void setToilet(Toilet toilet) { this.toilet = toilet; } } class Engine{ private String name; public Engine() { super(); } public Engine(String name) { super(); this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } } class Room{ private String name; public Room() { super(); } public Room(String name) { super(); this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } } class Toilet{ private String name; public Toilet() { super(); } public Toilet(String name) { super(); this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
package hong.study.builder; /** * 建造者接口,创建飞船的各个组件,与具体的建造细节分离 * @author Hong * */ public interface AirshipBuilder { Engine buildEngine(); Room buildRoom(); Toilet buildToilet(); }
package hong.study.builder; /** * 如何组装飞船的指导者,虽然飞船都需要必要的组件 * 但是这些组件如何组装,例如组装的顺序,接口如何对接等 * 是通过指导者来实现的,组装方法返回一个完整的飞船 * @author Hong * */ public interface AirshipDirector { Airship directAirship(); }
package hong.study.builder; /** * Hong公司生产的飞船的组件 * @author Hong * */ public class HongAirshipBuilder implements AirshipBuilder{ @Override public Engine buildEngine() { return new Engine("HongEngine"); } @Override public Room buildRoom() { return new Room("HongRoom"); } @Override public Toilet buildToilet() { return new Toilet("HongToilet"); } }
package hong.study.builder; /** * Hong公司的指导者组装出的飞船 * @author Hong * */ public class HongAirshipDirector implements AirshipDirector{ private AirshipBuilder hab; public HongAirshipDirector() { super(); this.hab = new HongAirshipBuilder(); } @Override public Airship directAirship() { Airship as = new Airship(); as.setEngine(hab.buildEngine()); as.setRoom(hab.buildRoom()); as.setToilet(hab.buildToilet()); return as; } }
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 设计模式之创建型模式
- 浅谈设计模式的学习
- PHP设计模式之装饰者模式代码实例
- php设计模式之单例模式实例分析
- 介绍php设计模式中的工厂模式
- PHP设计模式之适配器模式代码实例
- 浅谈c#设计模式之单一原则
- C#设计模式之观察者模式实例讲解
- C#设计模式之单例模式实例讲解
- 深入理解JavaScript系列(28):设计模式之工厂模式详解
- 面向对象设计模式的核心法则
- JavaScript设计模式之单件模式介绍
- 深入理解JavaScript系列(25):设计模式之单例模式详解
- JavaScript设计模式之外观模式实例
- 常见的PHP五种设计模式小结
- 小议javascript 设计模式 推荐
- javascript 设计模式之单体模式 面向对象学习基础