Javaにおける23のデザインパターン【創造型パターン】の【構築者パターン】


文書ディレクトリ
  • 設計モード分類
  • ビルダーモード
  • コード

  • デザインパターン分類
  • 作成モード
  • 単例モード、工場モード、抽象工場モード、建設者モード、プロトタイプモード
  • 注目オブジェクトの作成プロセス
  • 構造型モード
  • アダプタモード、ブリッジモード、装飾モード、コンビネーションモード、外観モード、メタモード、プロキシモード
  • 注目オブジェクトとクラスの組織
  • 動作モード
  • テンプレートメソッドモード、コマンドモード、反復器モード、オブザーバモード、仲介モード、メモモード、解釈器モード、ステータスモード、ポリシーモード、責任チェーンモード、訪問者モード
  • .
  • システムとオブジェクトとの相互作用に注目し、システムの実行時オブジェクト間の相互通信と協力を研究し、オブジェクトの職責
  • をさらに明確にする.

    コンストラクタモード
  • シーン:
  • 複雑な製品を構築します.例えば、神州の宇宙船、Iphone.この複雑な製品の作成には、次のような問題があります.
  • これらのサブアセンブリを組み立てるにはステップの問題がありますか?

  • の実際の開発では,我々が必要とするオブジェクトを構築する際にも非常に複雑であり,処理する必要があるステップが多い.

  • 建造モデルの本質:
  • は、オブジェクトサブアセンブリの個別の構造(Builderが担当)とアセンブリ(Directorが担当)を分離します.これにより、複雑なオブジェクトを構築できます.このモードは、オブジェクトの構築プロセスが複雑な場合に使用できます.
  • は、構築およびアセンブリのデカップリングが実現されたためである.異なるコンストラクタ、同じアセンブリ、異なるオブジェクトを作成することもできます.同じコンストラクタでは、異なるアセンブリ順序で異なるオブジェクトを作成することもできます.すなわち,構造アルゴリズム,アセンブリアルゴリズムのデカップリングを実現し,より良い多重化
  • を実現した.
  • 開発中のアプリケーションシーン
  • StringBuilderクラスのappendメソッド
  • SQLのPreparedStatement
  • JDOM中、Dombuilder、SAXBbuilder

  • コード#コード#
    宇宙船の建造を例にとると
  • 宇宙船には、(AirShip)
  • エンジン
  • 脱出タワー(EscapeTower)
  • 軌道室(OrbitalModule)
  • 建造宇宙船部品インタフェース(AirShipBuilder)
  • 組立宇宙船インターフェース(AirShipDirector)
  • 建造部品実装類(MyAirShipBuilder)と組立宇宙船実装類(MyAirShipDirector)
  • クライアント(呼び出し元)を介して
  • が呼び出される.
  • 部品
    //   
    public class Engine {
           
    	private String name;
    	
    
    	public Engine(String name) {
           
    		super();
    		this.name = name;
    	}
    
    	public String getName() {
           
    		return name;
    	}
    
    	public void setName(String name) {
           
    		this.name = name;
    	}
    }
    
    //   ————————————————————————————————————————————————————————
    public class OrbitalModule{
           
    	private String name;
    	
    	public OrbitalModule(String name) {
           
    		super();
    		this.name = name;
    	}
    
    	public String getName() {
           
    		return name;
    	}
    
    	public void setName(String name) {
           
    		this.name = name;
    	}
    	
    }
    
    //   ——————————————————————————————————————————————————————————
    public class EscapeTower {
           
    	private String name;
    	
    
    	public EscapeTower(String name) {
           
    		super();
    		this.name = name;
    	}
    
    	public String getName() {
           
    		return name;
    	}
    
    	public void setName(String name) {
           
    		this.name = name;
    	}
    }
    
  • 宇宙船及び部品、及び宇宙船を追加する各種方法
    package builder;
    
    /**
     *     
     * @author    Drk
     *
     */
    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;
    	}	
    }
    
    
    
    
  • 構築インターフェースおよび組立インターフェース
    //  
    public interface AirShipBuilder {
           
    	
    	Engine builderEngine();
    	OrbitalModule builderOrbitalModule();
    	EscapeTower builderEscapeTower();
    }
    
    //  
    public interface AirShipDirector {
           
    	
    	/**
    	 *       
    	 * @return
    	 */
    	AirShip directAirShip();
    }
    
    
  • 建造実装クラスと組立実装クラス
    //  
    public class MyAirShipBuilder implements AirShipBuilder{
           
    
    	@Override
    	public Engine builderEngine() {
           
    		System.out.println("     ");
    		return new Engine("     ");
    		
    	}
    
    	@Override
    	public OrbitalModule builderOrbitalModule() {
           
    		System.out.println("     ");
    		return new OrbitalModule("     ");
    	}
    
    	@Override
    	public EscapeTower builderEscapeTower() {
           
    		System.out.println("     ");
    		return new EscapeTower("     ");
    	}
    
    }
    
    //  
    package builder;
    
    public class MyAirshipDirector implements AirShipDirector{
           
    
    	private AirShipBuilder builder;//                
    	
    	public MyAirshipDirector(AirShipBuilder builder) {
           
    		super();
    		this.builder = builder;
    	}
    
    
    	@Override
    	public AirShip directAirShip() {
           //    
    		Engine e = builder.builderEngine();//              
    		OrbitalModule o =  builder.builderOrbitalModule();//     
    		EscapeTower et = builder.builderEscapeTower();//     
    		
    		//      
    		AirShip ship = new AirShip();//      
    		ship.setEngine(e);//     
    		ship.setEscapeTower(et);//     
    		ship.setOrbitalModule(o);//     
    		
    		return ship;//       
    	}
    
    }
    
    
  • 呼び出し者(クライアント)クラス
    package builder;
    
    public class Client {
           
    	
    	public static void main(String[] args) {
           
    		AirShipDirector director = new MyAirshipDirector(new MyAirShipBuilder());
    		
    		AirShip ship = director.directAirShip();
    		
    		System.out.println(ship.getEngine().getName());
    		
    		ship.launch();
    
    	}
    			
    }
    
    //  ————————————————————————————————————