Javaシンプルファクトリモデルの実装

2325 ワード

ファクトリモードは作成モードに属します
単純ファクトリモード
クラス図
ファクトリクラスを使用して、対応するオブジェクトを1つの条件で作成します.
//    
public interface ICalculation {
	double getResult(double numA, double numB);
}
public class CalcAdd implements ICalculation {

	@Override
	public double getResult(double numA, double numB) {
		System.out.println("  ");
		return numA + numB;
	}

}
public class CalcSubtract implements ICalculation {

	@Override
	public double getResult(double numA, double numB) {
		System.out.println("  ");
		return numA - numB;
	}

}
/*
 *          :     
 *        ,                             
 */
public class Test4Simple {
	public static void main(String[] args) {
//		String operation = "/";
		String operation = "+";
//		String operation = "-";
//		String operation = "*";
		double numA = 182, numB = 33;
		ICalculation createCalc = CalcSimpleFactory.createCalc(operation);
		double result = createCalc.getResult(numA, numB);
		System.out.println(result);
	}
}

単純ファクトリの欠陥:単純ファクトリで製品を作成する場合は、適切なパラメータを渡す必要があります.正しく渡さないとオブジェクトが取得されません.
改善:複数の方法で異なる製品を作成
クラス図
public class CalcMultipleFactory {
	
	public static ICalculation produceAdd() {
		return new CalcAdd();
	}
	
	public static ICalculation produceSubtract() {
		return new CalcSubtract();
	}
	
	public static ICalculation produceMultiply() {
		return new CalcMultiply();
	}
	
	public static ICalculation produceDivide() {
		return new CalcDivide();
	}
}
public class Test4Multiple {

	public static void main(String[] args) {
		double numA = 182, numB = 33;
		
		ICalculation createCalc = CalcMultipleFactory.produceAdd();
		double result = createCalc.getResult(numA, numB);
		System.out.println(result);
		
		createCalc = CalcMultipleFactory.produceSubtract();
		result = createCalc.getResult(numA, numB);
		System.out.println(result);
		
		createCalc = CalcMultipleFactory.produceMultiply();
		result = createCalc.getResult(numA, numB);
		System.out.println(result);
		
		createCalc = CalcMultipleFactory.produceDivide();
		result = createCalc.getResult(numA, numB);
		System.out.println(result);
	}
}