简单工厂模式

下面用一个模拟计算器的例子简单讲解一下:

一、控制台输入两个数和运算符,模拟加减乘除四则运算

1.加、减、乘、除四种操作均为运算操作,可抽取抽象公共父类Operator

public abstract class Operator {
	
	//操作数number_A
	private String number_A;
	//操作数number_B
	private String number_B;
	
	public String getNumber_A() {
		return number_A;
	}
	
	public void setNumber_A(String number_A) {
		this.number_A = number_A;
	}
	
	public String getNumber_B() {
		return number_B;
	}
	
	public void setNumber_B(String number_B) {
		this.number_B = number_B;
	}
	
	//执行运算,并获取结果
	public abstract double getResult();
}

加法子类:

public class Add extends Operator{
	
	@Override
	public double getResult() {
		double number_A=Double.parseDouble(getNumber_A());
		double number_B=Double.parseDouble(getNumber_B());
		return number_A+number_B;
	}
	
}

减法子类:

public class Sub extends Operator{

	@Override
	public double getResult() {
		double number_A=Double.parseDouble(getNumber_A());
		double number_B=Double.parseDouble(getNumber_B());
		return number_A-number_B;
	}

}

乘法子类:

public class Mul extends Operator{

	@Override
	public double getResult() {
		double number_A=Double.parseDouble(getNumber_A());
		double number_B=Double.parseDouble(getNumber_B());
		return number_A*number_B;
	}

}

除法子类:

public class Div extends Operator{

	@Override
	public double getResult() {
		double number_A=Double.parseDouble(getNumber_A());
		double number_B=Double.parseDouble(getNumber_B());
		return number_A/number_B;
	}
	
}

各个子类只是重写了getResult方法,表现出自己的特性(进行加、减、乘、除操作)

2.工厂类(通俗来说就是集中new 同一类型的对象):根据用户输入的运算符,选择性返回生成的对应的子类

public class OpFactory {
	
	public static Operator create(String operatorStr) {
		switch(operatorStr) {
			case "+":
				return new Add();
			case "-":
				return new Sub();
			case "*":
				return new Mul();
			case "/":
				return new Div();
			default:
				throw new RuntimeException("不支持该运算操作");
		}
	}
}

运算工厂通过传入的运算符,返回对应的运算类,如果传入了不支持的运算符,将会抛出一个运行时异常

3.测试类:

public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		System.out.println("请输入数A:");
		String number_A=scanner.nextLine();
		System.out.println("请输入数B:");
		String number_B=scanner.nextLine();
		System.out.println("请输入操作符:");
		String operatorStr=scanner.nextLine();
		scanner.close();
		
		Operator operator=OpFactory.create(operatorStr);
		operator.setNumber_A(number_A);
		operator.setNumber_B(number_B);
		System.out.println("运算结果为:"+operator.getResult());
	}

从控制台输入依次输入数A、B、操作符,然后用工厂类根据操作符获取对应的操作类,并执行运算

二、如果想要新添加一个开方的运算,那么只需要添加一个开方的子类继承父类,并在工厂类里面加入它的生成即可!

 

总结特点:利用多态的特性,在一个工厂类中生成子类,方便以后代码的维护和扩展,即简单工厂模式

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值