Java 实现简单工厂模式

工厂模式 属于创建型模式

简单工厂模式

通过一个厂类,以一个条件来创建对应的对象

//业务功能
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);
	}
}



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。