java設計モードの工場モード(2)


工場モード:作成モードに属します。私たちの生活の中のメーカーと似ています。私たちは自分で製品を作るのではなく、メーカーによって製造しています。簡単に言えば工場を作ることです。  私たちのニーズに合わせてnewのオブジェクトをください。   工場モデルはまた工場の方法モードと抽象工場のモードに分けられます。 工場の方法のモードはまた分けます:普通の工場の方法、静的な工場の方法。
package com.pattern.build.facotry.simple;

/**
 *     
 * @author chuer
 * @date 2014-7-24   6:15:44
 * @version V1.0
 */
public interface Fruit {

	public void name(); //    
	
}
 
package com.pattern.build.facotry.simple;
/**
 *   
 * @author chuer
 * @date 2014-7-24   6:16:08
 * @version V1.0
 */
public class Apple implements Fruit {

	@Override
	public void name() {
		System.out.println("apple");

	}

}
 
package com.pattern.build.facotry.simple;

/**
 *   
 * @author chuer
 * @date 2014-7-24   6:16:19
 * @version V1.0
 */
public class Orange implements Fruit {

	@Override
	public void name() {
		System.out.println("orange");

	}

}
 
package com.pattern.build.facotry.simple;

public class FruitFactory {//           (        )

	private FruitFactory(){}
	private static FruitFactory factory = new FruitFactory();
	public static FruitFactory getInstance(){
		return factory;
	}
	
	
	//        :
	
	
	/**
	 *                 
	 * @param name
	 * @return
	 */
	public Fruit createFruit(String name){
		Fruit fruit = null;
		if(name.equals("apple")){
			fruit = new Apple();
		}else if(name.equals("orange")){
			fruit = new Orange();
		}
		return fruit;
		
	}
	
	
	/**
	 *     
	 * @return
	 */
	public Fruit createApple(){
		return new Apple();
	}
	
	/**
	 *     
	 * @return
	 */
	public Fruit createOrange(){
		return new Orange();
	}
	
	//----------------------------   -----------------------------------
	//        
	
	public static Fruit create_fruit(String name){
		Fruit fruit = null;
		if(name.equals("apple")){
			fruit = new Apple();
		}else if(name.equals("orange")){
			fruit = new Orange();
		}
		return fruit;
	}
	
	/**
	 *     
	 * @return
	 */
	public static Fruit create_apple(){
		return new Apple();
	}
	
	/**
	 *     
	 * @return
	 */
	public static Fruit create_orange(){
		return new Orange();
	}
	
}
 
package com.pattern.build.facotry.simple;

public class Client {

	public static void main(String[] args) {
		Fruit fruit = FruitFactory.getInstance().createFruit("apple");
		fruit.name();
		
		
		fruit = FruitFactory.getInstance().createFruit("orange");
		fruit.name();
		
		
	}

}
コードを通して、各工場の方法パターンには二つの書き方があります。その中の一つは私達が一つの標識を伝えて、そのような製品を作ることを確定します。もう一つは必要ではありません。  つまり一つは一つの方法であり、一つは複数の方法である。  長所は簡単で使いやすいことです。しかし、同じ長所も欠点です。バナナという果物を新たに加えるには、工場の種類を変えなければなりません。私たちの後期メンテナンスが増加しました。  ちょっと負担しました        抽象工場モデルはこの欠点を補うことができる。
package com.pattern.build.facotry.abs;

import com.pattern.build.facotry.simple.Fruit;

public interface AbstractFactory {

	public Fruit crearFruit();
	
}
 
package com.pattern.build.facotry.abs;

import com.pattern.build.facotry.simple.Apple;
import com.pattern.build.facotry.simple.Fruit;

public class AppleFactory implements AbstractFactory {

	@Override
	public Fruit crearFruit() {
		return new Apple();
	}
	

}
 
package com.pattern.build.facotry.abs;

import com.pattern.build.facotry.simple.Fruit;
import com.pattern.build.facotry.simple.Orange;

public class OrangeFactory implements AbstractFactory {

	@Override
	public Fruit crearFruit() {
		return new Orange();
	}

}
抽象的な工場モデルのコードを見て、確かに果物を追加するなら、もとの工場類を修正する必要はなく、もう一つの種類を作り直します。でもたくさんあったら  果物なら、多くの工場類が出ます。           つまり、工場の方法モデルと抽象工場のモデルはそれぞれ長所があります。自分の本当の状況に合わせて使うことができます。