Fork me on GitHub

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

 

posted @ 2018-12-06 17:13  Banana_Fish  阅读(308)  评论(0编辑  收藏  举报