JAVA设计模式之建造者模式
建造者模式,用于生产复杂对象。核心:用两个属性集合来实现创建对象时的链式调度。
=================建造者=====================
public interface Build { public void makeWindow(); public void makeFloor(); public Room build(); }
=======================设计者====================================
public class Designer { public Room build(Build build){ build.makeWindow(); build.makeFloor(); return build.build(); }
}
=========================引用对象=======================================
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() { return "Room{" + "window='" + window + '\'' + ", floor='" + floor + '\'' + '}'; } }========================具体建筑者===============================
public class WorkBuilder implements Build { private Room room = new Room(); @Override public void makeWindow() { room.setWindow("window"); } @Override public void makeFloor() { room.setFloor("floor"); } @Override public Room build() { return room; } }===========================调用 ============================================
Build worker = new WorkBuilder(); Designer designer = new Designer(); Room room = designer.build(worker); System.out.println(room);
建造者模式链式调度修改
=================建造对象引用=================================
public class Room { private String window; private String floor; public void apply(WorkBuilder.RoomParams params) { window = params.widow; floor = params.floor; } @Override public String toString() { return "Room{" + "window='" + window + '\'' + ", floor='" + floor + '\'' + '}'; } }
==================建造者=============================
public class WorkBuilder { private RoomParams params; public WorkBuilder(){ this.params = new RoomParams(); } public WorkBuilder makeWindow(String window) { params.widow=window; return this; } public WorkBuilder makeFloor(String floor) { params.floor=floor; return this; } public Room build() { Room room = new Room(); room.apply(params); return room; } class RoomParams { public String widow; public String floor; } }
======================调用================================
WorkBuilder workBuilder = new WorkBuilder(); Room room= workBuilder.makeWindow("my widow").makeFloor(" my floor").build(); System.out.println(room);
源码中建造者模式链式场景有
AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("提示").create().show();
时序图 如下