Java設計モード-ファクトリメソッド(Factory Method)


Template Method Patternは親クラスで処理ロジックのアウトラインスケルトンを構築し,子クラスで具体的な処理内容を補完し,テンプレートメソッドをオブジェクトインスタンスの生成に用いると式工場メソッドモデルである.      Factory Method Patternは、親クラスでオブジェクトの作成方法を指定しますが、より具体的なクラス名には入りません.すべての具体的な完全な内容はサブクラスに配置され、この原則に基づいて、オブジェクトインスタンスを生成するフレームワークと実際にオブジェクトインスタンスを生成するクラスの2つの側面に大別することができます.
    1.フレームクラス
package com.pattern.factorymethod;

public abstract class Factory {
	public final Cup make(String shape,String color) {//       , final              
		Cup cup = makeCup(shape);
		smearColor(cup,color);
		return cup;
	}
	protected abstract Cup makeCup(String shape); //    ,    ,shape         
	protected abstract void smearColor(Cup cup,String color);  //    ,       
	
}

 2.実装クラス
  
package com.pattern.factorymethod;

public class CupFactory extends Factory {

	protected Cup makeCup(String shape) {
		Cup cup = new Cup();
		cup.setShape(shape);
		return cup;
	}
	protected void smearColor(Cup cup, String color) {//   
		cup.setColor(color);
	}

}

 3.コップ(本体類)
 
package com.pattern.factorymethod;

public  class Cup {
	private String shape;
	private String color;

	public String getColor() {
		return color;
	}

	public void setColor(String color) {
		this.color = color;
	}

	public String getShape() {
		return shape;
	}

	public void setShape(String shape) {
		this.shape = shape;
	}	
	
}

 
4.テスト
 
package com.pattern.factorymethod;

public class Main {
	public static void main(String[] args) {
		//        
		CupFactory factory = new CupFactory();
		Cup cup1 = factory.make("  ", "  ");//      ,      
		System.out.println("     ");
		System.out.println("  :"+cup1.getShape());
		System.out.println("  :"+cup1.getColor());
		
		Cup cup2 = factory.make("  ", "  ");//      ,      
		System.out.println("     ");
		System.out.println("  :"+cup2.getShape());
		System.out.println("  :"+cup2.getColor());
	}
}

 
結果:
    コップができた    シェイプしぇいぷ:円形えんけい    色:赤    コップができた    シェイプしぇいぷ:正方形ほうけい    色:青