Java设计模式之建造者模式
2016-03-09 22:17
323 查看
建造者模式
建造者模式的本质:分离对象性的子组件的单独构造(由Builder负责)和装配(Director负责)。从而可以构造出复杂对象,这个模式适用于:某个对象的构造过程很复杂。
由于是吸纳了构建和装配的解耦。不同的构造器,相同的装配,也可以做出不同的对象;相同的构造器,不同的装配顺序也可以做出不同的对象。也就是实现了构建算法、装配算法的解耦,实现了更好的复用。
应用场景有:
StringBuilder类中的append方法
SQL中的PreparedStatement
JDOM中,DOMBuilder、SAXBuilder
本文以构建一个飞船为例。飞船由轨道舱、发动机和逃逸舱构成。(本文示例参考自北京尚学堂java教程,高淇)
飞船类如下:
public class Airship { private OrbitalMudule orbitalMudule;//轨道舱 private Engine engine;//发动机 private EscapeTower escapeTower;//逃逸舱 public OrbitalMudule getOrbitalMudule() { return orbitalMudule; } public void setOrbitalMudule(OrbitalMudule orbitalMudule) { this.orbitalMudule = orbitalMudule; } public Engine getEngine() { return engine; } public void setEngine(Engine engine) { this.engine = engine; } public EscapeTower getEscapeTower() { return escapeTower; } public void setEscapeTower(EscapeTower escapeTower) { this.escapeTower = escapeTower; } public Airship(OrbitalMudule orbitalMudule, Engine engine, EscapeTower escapeTower) { this.orbitalMudule = orbitalMudule; this.engine = engine; this.escapeTower = escapeTower; } public Airship() { } @Override public String toString() { return "飞船 轨道舱是:" + orbitalMudule + ", 发动机是:" + engine + ", 逃逸舱是:" + escapeTower; } } class OrbitalMudule{ private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public OrbitalMudule(String name) { this.name = name; } @Override public String toString() { return name; } } class Engine{ private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public Engine(String name) { this.name = name; } @Override public String toString() { return name; } } class EscapeTower{ private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public EscapeTower(String name) { this.name = name; } @Override public String toString() { return name; } }飞船类,包含轨道舱类,发动机类和逃逸舱类的三个成员变量。
接下来就是重点之一的Builder:
public interface AirshipBuider { /** * 建造飞船各个零件 */ OrbitalMudule builderOrbitalMudule(); Engine builderEngine(); EscapeTower builderEscapeTower(); }重点之二的Director:
public interface AirshipDirector { /** * 组装飞船对象 * @return */ Airship directorAirship(); }
下面是具体实现的建造者,实现了AirshipBuilder接口:
public class MyAirshipBuilder implements AirshipBuider{ @Override public OrbitalMudule builderOrbitalMudule() { System.out.println("构建轨道舱-MJH制造"); return new OrbitalMudule("轨道舱-MJH制造"); } @Override public Engine builderEngine() { System.out.println("构建发动机-MJH制造"); return new Engine("发动机-MJH制造"); } @Override public EscapeTower builderEscapeTower() { System.out.println("构建逃逸舱-MJH制造"); return new EscapeTower("逃逸舱-MJH制造"); } }
比较关键的是这个装备者的具体实现:
public class MyAirshipDirector implements AirshipDirector{ //首先应该有一个建造者 private AirshipBuider builder; public MyAirshipDirector(AirshipBuider builder) { this.builder = builder; } @Override public Airship directorAirship() { Engine e = builder.builderEngine(); OrbitalMudule o = builder.builderOrbitalMudule(); EscapeTower et = builder.builderEscapeTower(); Airship ship = new Airship(o,e,et); return ship; } }MyAirshipDirector实现了AirshipDirector,并且持有一个建造者的引用,通过构造器传入。建造者来建造具体的各个组件,然后由装配者完成组装,最后返回一个Airship对象。
测试:
public class Client { public static void main(String[] args) { AirshipDirector director = new MyAirshipDirector(new MyAirshipBuilder()); Airship ship = director.directorAirship(); System.out.println(ship); } }输出:
构建发动机-MJH制造 构建轨道舱-MJH制造 构建逃逸舱-MJH制造 飞船 轨道舱是:轨道舱-MJH制造, 发动机是:发动机-MJH制造, 逃逸舱是:逃逸舱-MJH制造
结论:
建造者模式使得构建和装配由两个不同的角色承担,实现了构建算法和装配算法的解耦,可以非常方便地构建出多种复杂的对象,并且具有极佳的拓展性。
相关文章推荐
- 全面解析设计模式中的建造者模式及相关C++实现
- JavaScript的设计模式经典之建造者模式
- 学习php设计模式 php实现建造者模式
- 详解C++设计模式编程中建造者模式的实现
- 深入理解JavaScript系列(27):设计模式之建造者模式详解
- JavaScript设计模式之建造者模式介绍
- C++设计模式之建造者模式
- Java设计模式之建造者模式(Builder模式)介绍
- java设计模式之建造者模式学习
- 从赵本山的小品联想到的Java设计模式
- JAVA设计模式学习第三天 设计模式之Chain of Responsibility——项目篇
- 学习:java设计模式—工厂模式
- 设计模式----简单工厂模式
- 建造者模式
- Java设计模式 创建模式-工厂模式(Factory)
- Java设计模式 创建模式-原型模式(Prototype)
- Java设计模式 创建模式-生成器模式(Builder)
- Java设计模式 创建模式-单态模式(Singleton)
- Java设计模式 结构模式-适配器模式(Adapter)
- 《Java设计模式》七大原则