建造者模式
来源:互联网 发布:数控冲床编程招聘 编辑:程序博客网 时间:2024/05/22 13:07
抽象建造者
/** * 建造者角色 * 工人接口,定义了各个工人所需要进行的工作 * 并不负责具体的建造 * * 同时房子是具体的(农民工)建造的 所以需要有返回房子的方法 * @author tucheng * */public interface Build { public void makeWindow(); public void makeFloor(); public Room getRoom();}
具体建造者
public class WorkBuilder implements Build{ private Room room=new Room(); @Override public void makeWindow() { room.setFloor("地板 "); } @Override public void makeFloor() { room.setWindow("窗户"); } @Override public Room getRoom() { return room; }}
设计者
/** * 指导者 角色 * 所具备的能力 * * 设计师 他知道房子怎么设计 * 他会指挥工人去建造 * 实际生活中 大厦的设计者并不会看大厦的具体实现细节 * 更多的是从整体角度出发,指挥这个工人团队建造 * 所以他肯定对工人所具备的能力和行为有很深的了解 * 换做程序代码中 ,他也肯定会持有工人 的这个对象的引用 * * * @author tucheng * */public class Designer { public void order(Build build) { build.makeFloor(); build.makeWindow(); }}
产品
/** * 房子类 * 首先要描述下 房子要有些什么 * 有哪些属性 * * @author tucheng * */public class Room { private String window; private String floor; public String getWindow() { return window; } public void setWindow(String window) { this.window = window; } public String getFloor() { return floor; } public void setFloor(String floor) { this.floor = floor; } @Override public String toString() { // TODO Auto-generated method stub return "---->floor "+floor+" window "+window; }}
测试部分
public class Client { public static void main(String[] args) { Build worker = new WorkBuilder(); //获取工人对象 Designer designer = new Designer(); //获取设计师对象 designer.order(worker); //设计师指挥工人工作 System.out.println(worker.getRoom());; //工人交房 } }
我们常用的并不是标准的建造者模式,而是建造者模式的一种变形,省略了设计者这个环节
/** * 房子类 * 首先要描述下 房子要有些什么 * 有哪些属性 * * @author tucheng * */public class Room { private String window; private String floor; private String doorl; private String chat; public void apply(WorkBuilder.RoomParmas parmas) { window=parmas.window; floor=parmas.floor; doorl=parmas.door; chat=parmas.chat; } public void setChat(String chat) { this.chat = chat; } @Override public String toString() { // TODO Auto-generated method stub return "---->floor "+floor+" window "+window; } public void show() { }}
public class WorkBuilder{ private RoomParmas parmas; public WorkBuilder( ) { this.parmas = new RoomParmas(); } public WorkBuilder makeWindow(String window ) { parmas.window=window; return this; } public WorkBuilder makeFloor(String floorCorlor) { parmas.floor=floorCorlor; return this; } public WorkBuilder makeDoor(String door) { parmas.door=door; return this; } public Room makeChat(String chat) { parmas.chat=chat; Room room=new Room(); return room; } public void show() { } public Room build() { Room room=new Room(); room.apply(parmas); return room; } class RoomParmas { public String window; public String floor; public String door; public String chat; }}
public class Client { public static void main(String[] args) { Room room=(new WorkBuilder()).makeWindow("蓝色玻璃").makeFloor("黄色地板").makeChat("").show();; //获取工人对象 System.out.println(room);; //工人交房 } }
阅读全文
0 0
- Builder 建造者模式
- 建造者模式
- 设计模式-------建造者
- 建造者模式
- 建造者模式(Builder)
- 建造者模式(Builder)
- 建造者模式
- 建造者模式 - builder
- 建造者模式
- Builder建造者模式
- 建造者模式(Builder)
- 建造者模式(builder)
- 建造者模式
- java建造者模式
- 建造者模式
- 建造者模式
- 建造者模式(Builder)
- 建造者模式
- Mac 下载安装和卸载mysql
- 城市平乱
- java序列化与反序列化
- Windows玩转Caffe(五): mnist模型可视化探知,Matlab绘制其Accuracy和Loss曲线
- 微信小程序实战--高仿人民日报
- 建造者模式
- 安卓小项目之Everyday(1)---使用fragment实现选项卡
- 谈谈深度学习中的 Batch_Size
- Lock和synchronized的区别和使用
- export default 和 export 区别
- MySql中limit和offset
- Python如何连接Mysql
- Tomcat version 7.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 and 6 Web
- Android Binder机制