java 简单工厂模式示例

本文通过一个简易计算器的例子介绍了工厂模式的应用。该计算器实现了加、减、乘、除四种基本运算,并展示了封装、继承与多态等面向对象特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       本文举一个简单的例子,用来说明工厂模式。(实现一个加减乘除的计算器)

       抽象操作类 :

package nc.lws.factory;

public abstract class AbstractOperation {
	
	private double number1;
	
	private double number2;

	public double getNumber1() {
		return number1;
	}

	public void setNumber1(double number1) {
		this.number1 = number1;
	}

	public double getNumber2() {
		return number2;
	}

	public void setNumber2(double number2) {
		this.number2 = number2;
	}
	
	public abstract double getResult();

}
           加减乘除实现类

package nc.lws.factory;

public class AddOperation extends AbstractOperation {

	@Override
	public double getResult() {
		return this.getNumber1() + this.getNumber2();
	}

}
package nc.lws.factory;

public class SubOperation extends AbstractOperation {

	@Override
	public double getResult() {
		return this.getNumber1() - this.getNumber2();
	}

}
package nc.lws.factory;

public class MutiOperation extends AbstractOperation {

	@Override
	public double getResult() {
		return this.getNumber1() * this.getNumber2();
	}

}
package nc.lws.factory;

public class DivOperation extends AbstractOperation {

	@Override
	public double getResult() {
		return this.getNumber1() / this.getNumber2();
	}

}

        操作标记类:

package nc.lws.factory;

public enum OperationLabel {
	ADD,
	SUB,
	MUTI,
	DIV
}

        工厂类:

package nc.lws.factory;

public class OperationFactory {
	
	public static AbstractOperation createOperation(OperationLabel operation) {
		AbstractOperation oper= null;
		
		switch(operation) {
		case ADD:
			oper = new AddOperation();
			break;
		case SUB:
			oper = new SubOperation();
			break;
		case MUTI:
			oper = new MutiOperation();
			break;
		case DIV:
			oper = new DivOperation();
			break;
		}
		
		return oper;
	}

}
        客户端测试类:

package nc.lws.factory;

public class ClientMain {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		AbstractOperation oper = null;
		//加法
	    oper = OperationFactory.createOperation(OperationLabel.ADD);
		oper.setNumber1(1);
		oper.setNumber2(2);
		System.out.println("add TEST----->" +oper.getResult());
		//减法
	    oper = OperationFactory.createOperation(OperationLabel.SUB);
		oper.setNumber1(1);
		oper.setNumber2(2);
		System.out.println("sub TEST----->" +oper.getResult());
		//乘法
		oper = OperationFactory.createOperation(OperationLabel.MUTI);
		oper.setNumber1(1);
		oper.setNumber2(2);
		System.out.println("muti TEST----->" +oper.getResult());
		//除法
		oper = OperationFactory.createOperation(OperationLabel.DIV);
		oper.setNumber1(1);
		oper.setNumber2(2);
		System.out.println("div TEST----->" +oper.getResult());

	}

}

            例子虽然简单,但体现了java的三大特性:封装,继承与多态。

            封装:具体操作为各种操作类,客户端调用为客户端类

            继承:具体操作继承了抽象操作类

            多态:客户端通过调用工厂方法动态实例化各种具体操作,而具体操作类又自动向上转型为抽象操作类



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值