Java 디자인 모드 -- - 작성자 모드

4078 단어

장면

  • 우리는 복잡한 제품을 건설해야 한다.예를 들어 신주비행선, 아이폰.이 복잡한 제품의 창설.이 서브어셈블리를 어셈블하는 데 절차에 문제가 있습니까?
  • 실제 개발에서 우리가 필요로 하는 대상을 구축할 때도 매우 복잡하고 처리해야 할 절차가 많다.

  • 건설자 모델의 본질

  • 개체 서브어셈블리의 개별 구성(Builder로 구성) 및 어셈블(Director 책임)을 분리합니다.그리하여 복잡한 대상을 구성할 수 있다.이 모델은 특정한 대상의 구축 과정이 복잡한 상황에서 사용된다.
  • 구축과 조립의 결합을 실현했기 때문이다.서로 다른 구축기, 같은 조립도 서로 다른 대상을 만들 수 있다.같은 구축기, 서로 다른 장비 순서도 다른 대상을 만들 수 있다.즉, 구축 알고리즘, 조립 알고리즘의 결합을 실현하고 더욱 좋은 복용을 실현했다.

  • 예제

    package builder;
    
    public class AirShip {
        private OrbitalModule orbitalModule;    //  
        private Engine engine;                          //  
        private EscapeTower escapeTower;     //  
    
        public void launch(){
            System.out.println(" ");
        }
    
        public OrbitalModule getOrbitalModule() {
            return orbitalModule;
        }
    
        public void setOrbitalModule(OrbitalModule orbitalModule) {
            this.orbitalModule = orbitalModule;
        }
    
        public Engine getEngine() {
            return engine;
        }
    
        public void setEngine(Engine engine) {
            this.engine = engine;
        }
    
        public EscapeTower getEscapeTower() {
            return escapeTower;
        }
    
        public void setEscapeTower(EscapeTower escapeTower) {
            this.escapeTower = escapeTower;
        }
    }
    
    class OrbitalModule{
        private String name;
    
        public OrbitalModule(String name) {
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    
    class Engine{
        private String name;
    
        public Engine(String name) {
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    
    class EscapeTower{
        private String name;
    
        public EscapeTower(String name) {
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    
    package builder;
    
    public interface AirShipBuilder {
        Engine builderEngine();
        OrbitalModule builderOrbitalModule();
        EscapeTower builderEscapeTower();
    }
    
    package builder;
    
    public interface AirShipDirector {
        /**
         *  
         * @return
         */
        AirShip directAirShip();
    }
    
    package builder;
    
    public class MyAirShipBuilder implements AirShipBuilder{
        //StringBuilder,DomBuilder,SaxBuilder
        public Engine builderEngine() {
            System.out.println(" ");
            return new Engine(" ");
        }
    
        public OrbitalModule builderOrbitalModule() {
            System.out.println(" ");
            return new OrbitalModule(" ");
        }
    
        public EscapeTower builderEscapeTower() {
            System.out.println(" ");
            return new EscapeTower(" ");
        }
    }
    
    package builder;
    
    public class MyAirShipDirector implements AirShipDirector{
        private AirShipBuilder builder;
    
        public MyAirShipDirector(AirShipBuilder builder) {
            this.builder = builder;
        }
    
        public AirShip directAirShip() {
            Engine engine = builder.builderEngine();
            OrbitalModule orbitalModule = builder.builderOrbitalModule();
            EscapeTower escapeTower = builder.builderEscapeTower();
            // 
            AirShip airShip = new AirShip();
            airShip.setEngine(engine);
            airShip.setOrbitalModule(orbitalModule);
            airShip.setEscapeTower(escapeTower);
            return airShip;
        }
    }
    
    package builder;
    
    public class Client {
        public static void main(String[] args) {
            AirShipDirector director = new MyAirShipDirector(new MyAirShipBuilder());
            AirShip airShip = director.directAirShip();
            System.out.println(airShip.getEngine().getName());
            airShip.launch();
        }
    }
    

    개발 중인 응용 장면:

  • StringBuilder 클래스의 append 방법
  • SQL의 PreparedStatement
  • JDOM에서 DomBuilder, SAXBuilder
  • 좋은 웹페이지 즐겨찾기