• java设计模式----建造者模式


    目录

       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

  • 相关阅读:
    19. 星际争霸之php设计模式--迭代器模式
    18. 星际争霸之php设计模式--观察者模式
    17. 星际争霸之php设计模式--职责链模式
    16. 星际争霸之php设计模式--组合模式
    15. 星际争霸之php设计模式--策略模式
    14. 星际争霸之php设计模式--状态模式
    13. 星际争霸之php设计模式--正面模式
    12. 星际争霸之php设计模式--模板模式
    11. 星际争霸之php设计模式--备忘模式
    10. 星际争霸之php设计模式--原型模式
  • 原文地址:https://www.cnblogs.com/bananafish/p/10076220.html
Copyright © 2020-2023  润新知