【创建型模式】建造者模式(Builder)之23种java设计模式
2016-04-22 09:57
811 查看
AirShip类
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 String getName() { return name; } public void setName(String name) { this.name = name; } public OrbitalModule(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) { this.name = name; }AirShipBuilder接口和实现类
public interface AirShipBuilder { Engine builderEngine(); OrbitalModule builderOrbitalModule(); EscapeTower builderEscapeTower(); }
public class SxtAirShipBuilder implements AirShipBuilder { @Override public Engine builderEngine() { System.out.println("构建发动机!"); return new Engine("发动机"); } @Override public EscapeTower builderEscapeTower() { System.out.println("构建逃逸塔!"); return new EscapeTower("逃逸塔"); } @Override public OrbitalModule builderOrbitalModule() { System.out.println("构建轨道舱!"); return new OrbitalModule("轨道舱"); } }AirShipDirector组装接口和实现类
public interface AirShipDirector { //组装 AirShip directAirShip(); } public class SxtAirShipDirector implements AirShipDirector { private AirShipBuilder builder; public SxtAirShipDirector(AirShipBuilder builder) { this.builder = builder; } @Override public AirShip directAirShip() { Engine engine = builder.builderEngine(); EscapeTower escapeTower = builder.builderEscapeTower(); OrbitalModule orbitalModule = builder.builderOrbitalModule(); AirShip airShip = new AirShip(); airShip.setEngine(engine); airShip.setEscapeTower(escapeTower); airShip.setOrbitalModule(orbitalModule); return airShip; } }测试类Client
public class Client { public static void main(String[] args) { AirShipDirector director = new SxtAirShipDirector(new SxtAirShipBuilder()); AirShip ship = director.directAirShip(); System.out.println(ship.getEngine().getName()); ship.launch(); } }
测试结果
构建发动机!
构建逃逸塔!
构建轨道舱!
发动机
方法
相关文章推荐
- EasyUI 增删改查完全详细
- UIImageView帧动画
- 【对照Android与IOS开发系列】之 Activity与UIViewController
- mongo客户端mongo VUE增删改查
- 常见移动设备的 CSS3 Media Query 整理(iPhone/iPad/Galaxy/HTC One etc.)
- 2016.04.22,英语,《Vocabulary Builder》Unit 17
- 一个类似MIUI中原生短信编辑功能
- UVA 1508 - Equipment 状态压缩 枚举子集 dfs
- pageContext.request.contextPath
- easyui datetimebox 如何只显示 月份,不显示具体的数据
- 关于EF分页查询报错(Count must have a non-negative value.)的解决方案
- 【代码笔记】UIScrollerView里有两个tableView
- 【代码笔记】iOS-UIScrollerView里有两个tableView
- String,StringBuffer与StringBuilder的区别??
- iOS开发系列--UITableView全面解析
- easyui中datagrid 部分参数说明
- 百度编辑器Ueditor自动换行,添加<p>的问题
- 基于UITextView的UITextField功能效果(有占位符功能)
- 【Light】[1048]Conquering Keokradong
- 第2课 GUI程序实例分析