Androidアーキテクチャのレベルアップ(六)——建設者モード


ビルダーモード
記事の目次
  • 建築者モード
  • 定義
  • 概要
  • 伝統的なBuilderモード
  • 1.メンバー
  • .例
  • .
  • を使用する.
  • Builderモードの改革——静的内部タイプBuilder
  • 1.メンバー
  • .例
  • .
  • を使用する.
  • 総括
  • 長所短所
  • 定義
    複雑なオブジェクトの構築は、同じ構築過程で異なる表示を作成することができます.
    概要
  • 建築者モードの使用目的は複雑なオブジェクトを構成することであり、対象内部が複雑でない場合や機能が多くない場合、建築者モードを使用する必要がない
  • である.
  • 使用者は、建物のプロセスや詳細に関心を持たなくてもよく、外部から提供される公共の方法を用いてオブジェクトを構成すればよい.
  • 建築者モードの使用については、基本的に2つの方法があり、1つは従来の外部Buider類の方式であり、一般に静的内部タイプBuilderを使用してオブジェクトを構成する.
  • 伝統的なBuilderモード
    1.メンバー
  • .製品類.
  • .抽象的なBuider類.
  • .Builder実現クラス;
  • .使用者.
  • 2.例
    私たちは建築者モードを使う目的は複雑なオブジェクトを作ることです.まず、この複雑なオブジェクト、すなわち製品類が必要です.
    public class Product{
    	private int param1;
    	private int param2;
    	private int param3;
    	private int param4;
    	private int param5;
    	private int param6;
    	/**
    	/* getter and setter
    	**/
    	...
    	 @Override
        public String toString() {
    		return ""+param1+param2+param3+param4+param5+param6;
    	}
    }
    
    次はこのモードの核心である抽象的なBuilder類(インターフェース)です.
    public interface Builder{
    	void setParam1();
    	void setParam2();
    	void setParam3();
    	void setParam4();
    	void setParam5();
    	void setParam6();
    	Product getProduct();
    }
    
    これから私達の実現類が必要です.
    public class BuilderImpl implements Builder{
    	private Product product;
    	public BuilderImpl(){
    		this.product = new Product();
    	}
    
    	@Override
    	public void setParam1(){
    		product.setParam1(1);
    	}
    
    	@Override
    	public void setParam2(){
    		product.setParam2(2);
    	}
    	
    	@Override
    	public void setParam3(){
    		product.setParam3(3);
    	}
    	
    	@Override
    	public void setParam4(){
    		product.setParam4(4);
    	}
    	
    	@Override
    	public void setParam5(){
    		product.setParam5(5);
    	}
    
    	@Override
    	public void setParam6(){
    		product.setParam6(6);
    	}
    	
    	@Override
        public Product getProduct() {
            return product;
        }
    }
    
    最後に使用類を実現します.
    public class Use{
    	private Builder builder;
    	public void setBuilder(Builder builder){
    		this.builder = builder;
    	}
    
    	public void createComputer(){
    		builder.setParam1();
    		builder.setParam2();
    		builder.setParam3();
    		builder.setParam4();
    		builder.setParam5();
    		builder.setParam6();
    	}
    	
    	public Product getProduct(){
    		return builder.getProduct();
    	}
    }
    
    3.使用
    public class Test{
    	public static void main(String[] args){
    		Use use = new Use();
    		use.setBuilder(new BuilderImpl ());
    		use.createProduct();
    		log.i("Product",use.toString());
    	}
    }
    
    出力:
    Product:"21"
    
    Builderモードの改革——静的内部タイプBuilder
    1.メンバー
    製品類と内部のBuilder類だけです.
    public class Product{
    	public static class Builder{
    	}
    }
    
    2.例
    public class Product{
    
    	private final String param1;
    	private final String param2;
    	private final String param3;
    	
    	private Product(Builder builder){
    		this.param1 = builder.param1;
    		this.param2 = builder.param2;
    		this.param3 = builder.param3;
    	}
    	
    	public static class Builder{
    		private final String param1;
    		private String param2;
    		private String param3; 
    		
    		public Builder(String param1){
    			this.param1 = param1;
    		}
    		
    		public Builder param2(){
    			this.param2 = param2;
    			return this;
    		}
    
    		public Builder param3(){
    			this.param3 = param3;
    			return this;
    		}
    
    		public Product build(){
    			return new Product(this);
    		}
    	}
    }
    
    3.使用
    public class Use{
    	public static void main(String[] args){
    		Product p = new Product.Builder("param1")
    			.param2("param2")
    			.param3("param3")
    			.build();
    	}
    }
    
    締め括りをつける
  • 実はたくさんの建築者モードを使ったことがあります.例えば、AlertDialogのBuilderです.
  • 作成者モードは、複雑なオブジェクトを作成するためのものであり、一般的なオブジェクトだけであれば、内部論理が少ない、または内部属性が多くないと、建築者モードを使用する必要がない(以上の2つの例はBuiderモードを使用する必要がない.本人は単なるサンプルとして使用する)
  • .
    長所と短所
    長所
    パッケージ性が良く、結合しやすく、拡張しやすく、オブジェクトの作成を正確に制御しやすい.
    欠点
    余分なBuildオブジェクトが発生し、製品間の差異が大きいと建築者モードの使用には適しないので、その使用範囲は一定の制限を受ける.