指挥者

    1. package miluo.design.patterns.builder;
    2. /**
    3. * @author Miluo
    4. * @className Director
    5. * @description 指挥者
    6. * @date 2022/2/25
    7. **/
    8. public class Director {
    9. private RoomBuilder roomBuilder;
    10. public Director(RoomBuilder roomBuilder) {
    11. this.roomBuilder = roomBuilder;
    12. }
    13. public Room getRoom() {
    14. roomBuilder.createFloor();
    15. roomBuilder.createFurniture();
    16. roomBuilder.createDecorate();
    17. return roomBuilder.getRoom();
    18. }
    19. }

    抽象建造者

    1. package miluo.design.patterns.builder;
    2. /**
    3. * @author Miluo
    4. * @className RoomBuilder
    5. * @description 抽象建造类
    6. * @date 2022/2/25
    7. **/
    8. public abstract class RoomBuilder {
    9. protected Room room = new Room();
    10. /**
    11. * 创建地板
    12. */
    13. public abstract void createFloor();
    14. /**
    15. * 创建家具
    16. */
    17. public abstract void createFurniture();
    18. /**
    19. * 创建装饰
    20. */
    21. public abstract void createDecorate();
    22. /**
    23. * 获取产品
    24. * @return 产品
    25. */
    26. public Room getRoom() {
    27. return this.room;
    28. }
    29. }

    具体建造者

    1. package miluo.design.patterns.builder;
    2. /**
    3. * @author Miluo
    4. * @className LivingRoom
    5. * @description
    6. * @date 2022/2/25
    7. **/
    8. public class BedRoomBuilder extends RoomBuilder {
    9. @Override
    10. public void createFloor() {
    11. room.setFloor("木制地板");
    12. }
    13. @Override
    14. public void createFurniture() {
    15. room.setFurniture("单人床");
    16. }
    17. @Override
    18. public void createDecorate() {
    19. room.setDecorate("床头柜");
    20. }
    21. }
    1. package miluo.design.patterns.builder;
    2. /**
    3. * @author Miluo
    4. * @className LivingRoom
    5. * @description
    6. * @date 2022/2/25
    7. **/
    8. public class LivingRoomBuilder extends RoomBuilder {
    9. @Override
    10. public void createFloor() {
    11. room.setFloor("瓷砖地板");
    12. }
    13. @Override
    14. public void createFurniture() {
    15. room.setFurniture("沙发");
    16. }
    17. @Override
    18. public void createDecorate() {
    19. room.setDecorate("茶几");
    20. }
    21. }

    产品

    1. package miluo.design.patterns.builder;
    2. import lombok.Getter;
    3. import lombok.Setter;
    4. /**
    5. * @author Miluo
    6. * @className Room
    7. * @description 产品类
    8. * @date 2022/2/25
    9. **/
    10. @Setter
    11. @Getter
    12. public class Room {
    13. private String floor;
    14. private String furniture;
    15. private String decorate;
    16. @Override
    17. public String toString() {
    18. return "由" + floor + "、" + furniture + "、" + decorate + "组成";
    19. }
    20. }

    测试

    1. package miluo.design.patterns.builder;
    2. /**
    3. * @author Miluo
    4. * @className testBuilder
    5. * @description
    6. * @date 2022/2/25
    7. **/
    8. public class TestBuilder {
    9. public static void main(String[] args) {
    10. LivingRoomBuilder livingRoomBuilder = new LivingRoomBuilder();
    11. Director livingDirector = new Director(livingRoomBuilder);
    12. Room livingRoom = livingDirector.getRoom();
    13. System.out.println("客厅:" + livingRoom.toString());
    14. System.out.println("**************");
    15. BedRoomBuilder bedRoomBuilder = new BedRoomBuilder();
    16. Director bedDirector = new Director(bedRoomBuilder);
    17. Room bedRoom = bedDirector.getRoom();
    18. System.out.println("卧室:" + bedRoom.toString());
    19. }
    20. }
    1. Connected to the target VM, address: '127.0.0.1:12822', transport: 'socket'
    2. 客厅:由瓷砖地板、沙发、茶几组成
    3. **************
    4. 卧室:由木制地板、单人床、床头柜组成
    5. Disconnected from the target VM, address: '127.0.0.1:12822', transport: 'socket'