设计模式——建造者模式
HeadFirst中并没有把建造者模式(生成器模式)当做常用的设计模式来讲解,只是在附录中一带而过。
建造者模式的本质:
分离了对象组件的单独构造(由Builder来负责)和装配(由Director)来负责。从而可以构建出复杂的对象。这个模式适用于:某个对象的构建
过程复杂的情况先使用。由于实现了构建和装配的解耦。不同的构建器,相同的装配,也可以做出不同的对象相同的构建器不同的装配顺序也可以
做出不同的对象。也就是实现了构建算法、装配算法的解耦,实现了更好的复用。
Demo:
package com.wxisme.builder; /** * 飞船 * @author Administrator * */ public class AirShip { private OrbitalModule orbitalModule; //轨道仓 private Engine engine; //发动机 private EscapeTower escapeTower; //逃逸塔 public void launch(){ System.out.println("发射!"); } public OrbitalModule getOrbitalModule() { return orbitalModule; } public void setOrbitalModule(OrbitalModule orbitalModule) { this.orbitalModule = orbitalModule; } 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; } } class OrbitalModule{ private String name; public OrbitalModule(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } } class Engine { private String name; public Engine(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } } class EscapeTower{ private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public EscapeTower(String name) { super(); this.name = name; } } public interface AirShipBuilder { Engine builderEngine(); OrbitalModule builderOrbitalModule(); EscapeTower builderEscapeTower(); } public interface AirShipDirector { AirShip directAirShip(); } public class MyAirShipBuilder implements AirShipBuilder { //StringBuilder, 以后学习XML解析中,JDOM库中的类:DomBuilder,SaxBuilder @Override public Engine builderEngine() { System.out.println("构建发动机"); return new Engine("MyEngine"); } @Override public EscapeTower builderEscapeTower() { System.out.println("构建逃逸塔"); return new EscapeTower("MyEscapeTower"); } @Override public OrbitalModule builderOrbitalModule() { System.out.println("构建轨道仓"); return new OrbitalModule("MyOrbitalModule"); } } public class MyAirshipDirector implements AirShipDirector { private AirShipBuilder builder; public MyAirshipDirector(AirShipBuilder builder) { this.builder = builder; } @Override public AirShip directAirShip() { Engine e = builder.builderEngine(); OrbitalModule o = builder.builderOrbitalModule(); EscapeTower et = builder.builderEscapeTower(); //装配飞船对象 AirShip ship = new AirShip(); ship.setEngine(e); ship.setEscapeTower(et); ship.setOrbitalModule(o); return ship; } } public class Client { public static void main(String[] args) { AirShipDirector director = new MyAirshipDirector(new MyAirShipBuilder()); AirShip ship = director.directAirShip(); System.out.println(ship.getEngine().getName()); ship.launch(); } }
作者:Pickle
声明:对于转载分享我是没有意见的,出于对博客园社区和作者的尊重一定要保留原文地址哈。
致读者:坚持写博客不容易,写高质量博客更难,我也在不断的学习和进步,希望和所有同路人一道用技术来改变生活。觉得有点用就点个赞哈。