建造者模式

来源:互联网 发布:数控冲床编程招聘 编辑:程序博客网 时间: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);;   //工人交房           }  }