目录
1.什么是建造者模式
2.建造者模式的简单实现(造飞机为例)
3.建造者模式使用场景
一、什么是建造者模式
建造者模式它分离对象子组件的单独构造和装配。从而可以构造出复杂的对象。
由于实现了构造和装配的解耦。不同的构造器,相同的装配,可以构建出不同的对象。相同的构建器,不同的装配顺序也可以构建出不同的对象。也就是实现了构建算法、装配算法的解耦,实现了更好的复用。
二、建造者模式的简单实现(造飞机为例)
假设一个飞机对象的模型如下:
对飞机对象而言,组装一架飞机需要座位对象、机舱对象、引擎对象。
以下是各对象的实体类:
package builder; /** * 飞机实体类 */ public class Aircraft { //发动机 private AirEngine airEngine; //座位 private AirSeat airSeat; //机舱 private AirRoom airRoom; public AirEngine getAirEngine() { return airEngine; } public void setAirEngine(AirEngine airEngine) { this.airEngine = airEngine; } public AirSeat getAirSeat() { return airSeat; } public void setAirSeat(AirSeat airSeat) { this.airSeat = airSeat; } public AirRoom getAirRoom() { return airRoom; } public void setAirRoom(AirRoom airRoom) { this.airRoom = airRoom; } } /** * 飞机发动机实体类 */ class AirEngine{ private String engine; public String getEngine() { return engine; } public void setEngine(String engine) { this.engine = engine; } } /** * 飞机座位实体类 */ class AirSeat{ private String seat; public String getSeat() { return seat; } public void setSeat(String seat) { this.seat = seat; } } /** * 飞机机舱实体类 */ class AirRoom{ private String room; public String getRoom() { return room; } public void setRoom(String room) { this.room = room; } }
生产一架飞机需要座位、机舱、引擎等零件
以下是各零件的构建:
package builder; /** * 生产飞机零件接口 */ public interface AircraftBuilder { AirRoom AirRoomBuild(); AirEngine AirEngineBuild(); AirSeat AirSeatBuild(); }
构建飞机零件的方法
接下来将由组装者组装一架飞机了
package builder; /** * 组装飞机接口 */ public interface AircraftDirector { Aircraft DirectorAircraft(); }
1 package builder; 2 3 /** 4 * 组装飞机实现类 5 */ 6 public class MyAircraft implements AircraftDirector{ 7 private AircraftBuilder aircraftBuilder; 8 @Override 9 public Aircraft DirectorAircraft() { 10 Aircraft aircraft = new Aircraft(); 11 aircraft.setAirEngine(aircraftBuilder.AirEngineBuild()); 12 aircraft.setAirRoom(aircraftBuilder.AirRoomBuild()); 13 aircraft.setAirSeat(aircraftBuilder.AirSeatBuild()); 14 return aircraft; 15 } 16 17 public MyAircraft(AircraftBuilder aircraftBuilder) { 18 this.aircraftBuilder=aircraftBuilder; 19 } 20 }
以上,一架飞机就造好了。
客户使用方法
package builder; public class Click { public static void main(String[] args) { Aircraft aircraft = new MyAircraft(new MyAircraftBuilder()).DirectorAircraft(); System.out.println(aircraft.getAirEngine().getEngine()); System.out.println(aircraft.getAirRoom().getRoom()); System.out.println(aircraft.getAirSeat().getSeat()); } }
三、建造者模式使用场景
构造者模式通常更工厂模式混合使用。工厂负责生产零件,组装者通常用来组装零件。它主要用于构建一个复杂的对象。达到解耦和的目的。由于它构造一个产品需要的工序太多,所以不适合简单类的构建。
在实际开发场景中使用到构造者模式的有
--StringBuilder类的append()方法
--SQL中的PreparedStatement
--JDOM中的DomBuilder、SAXBuilder