指挥者
package miluo.design.patterns.builder;/*** @author Miluo* @className Director* @description 指挥者* @date 2022/2/25**/public class Director {private RoomBuilder roomBuilder;public Director(RoomBuilder roomBuilder) {this.roomBuilder = roomBuilder;}public Room getRoom() {roomBuilder.createFloor();roomBuilder.createFurniture();roomBuilder.createDecorate();return roomBuilder.getRoom();}}
抽象建造者
package miluo.design.patterns.builder;/*** @author Miluo* @className RoomBuilder* @description 抽象建造类* @date 2022/2/25**/public abstract class RoomBuilder {protected Room room = new Room();/*** 创建地板*/public abstract void createFloor();/*** 创建家具*/public abstract void createFurniture();/*** 创建装饰*/public abstract void createDecorate();/*** 获取产品* @return 产品*/public Room getRoom() {return this.room;}}
具体建造者
package miluo.design.patterns.builder;/*** @author Miluo* @className LivingRoom* @description* @date 2022/2/25**/public class BedRoomBuilder extends RoomBuilder {@Overridepublic void createFloor() {room.setFloor("木制地板");}@Overridepublic void createFurniture() {room.setFurniture("单人床");}@Overridepublic void createDecorate() {room.setDecorate("床头柜");}}
package miluo.design.patterns.builder;/*** @author Miluo* @className LivingRoom* @description* @date 2022/2/25**/public class LivingRoomBuilder extends RoomBuilder {@Overridepublic void createFloor() {room.setFloor("瓷砖地板");}@Overridepublic void createFurniture() {room.setFurniture("沙发");}@Overridepublic void createDecorate() {room.setDecorate("茶几");}}
产品
package miluo.design.patterns.builder;import lombok.Getter;import lombok.Setter;/*** @author Miluo* @className Room* @description 产品类* @date 2022/2/25**/@Setter@Getterpublic class Room {private String floor;private String furniture;private String decorate;@Overridepublic String toString() {return "由" + floor + "、" + furniture + "、" + decorate + "组成";}}
测试
package miluo.design.patterns.builder;/*** @author Miluo* @className testBuilder* @description* @date 2022/2/25**/public class TestBuilder {public static void main(String[] args) {LivingRoomBuilder livingRoomBuilder = new LivingRoomBuilder();Director livingDirector = new Director(livingRoomBuilder);Room livingRoom = livingDirector.getRoom();System.out.println("客厅:" + livingRoom.toString());System.out.println("**************");BedRoomBuilder bedRoomBuilder = new BedRoomBuilder();Director bedDirector = new Director(bedRoomBuilder);Room bedRoom = bedDirector.getRoom();System.out.println("卧室:" + bedRoom.toString());}}
Connected to the target VM, address: '127.0.0.1:12822', transport: 'socket'客厅:由瓷砖地板、沙发、茶几组成**************卧室:由木制地板、单人床、床头柜组成Disconnected from the target VM, address: '127.0.0.1:12822', transport: 'socket'
