简单工厂模式

工作了将近两年,感觉自己很辣鸡,于是买了几本书,学习一下,提高一下自己. 看了大话设计模式这本书,把学到的记录一下。


需求 :实现一个简单的计算器功能。

一般的情况下:

public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入一个数A");
		Double numberA = scanner.nextDouble();
		System.out.println("请输入一个数B");
		Double numberB = scanner.nextDouble();
		System.out.println("请选择一种运算方式:加(+)、减(-)、乘(*)、除(/)");
		String operation = scanner.next();
		double rst = 0;
		if (operation.equals("+")) {
			rst = numberA + numberB;
		}
		if (operation.equals("-")) {
			rst = numberA - numberB;
		}
		if (operation.equals("*")) {
			rst = numberA * numberB;
		}
		if (operation.equals("/")) {
			rst = numberA / numberB;
		}

		System.out.println("结果为:" + rst);

	}
但是这种代码真的很辣鸡,只是简单的实现了需求,如果需要改变条件或者增减条件,都需要重构代码 ,很显然不易于维护。

看下面的代码 :

首先创建一个运算类 

public class Operation {
	
	private double _numberA=0;
	
	private double _numberB=0;

	public double get_numberA() {
		
		return _numberA;
	}

	public void set_numberA(double _numberA) {
		this._numberA = _numberA;
	}

	public double get_numberB() {
		return _numberB;
	}

	public void set_numberB(double _numberB) {
		this._numberB = _numberB;
	}

	public  double GetResult(){
		
		double result =0 ;
		
		return result;
	}
	
}
在创建 加减乘除类 :

public class OperationAdd extends Operation {
	
public  double GetResult(){
		
		double result =0 ;
		result=super.get_numberA()+super.get_numberB();
		
		return result;
	}
	
	

}

public class OperationSub extends Operation {
	
public  double GetResult(){
		
		double result =0 ;
		result=super.get_numberA()-super.get_numberB();
		
		return result;
	}
	

}

public class OperationMul extends Operation {
public  double GetResult(){
		
		double result =0 ;
		result=super.get_numberA()*super.get_numberB();
		
		return result;
	}
	

}

public class OperationDiv extends Operation {
	
public  double GetResult(){
		
		double result =0 ;
		result=super.get_numberA()/super.get_numberB();
		
		return result;
	}
	

}
在创建一个工厂类

public class OperationFactory {
	
	public static Operation createOperate(String operate){
		
		Operation oper=null;
		switch (operate) {
		case  "+":
			oper =new OperationAdd();
			break;
		case "-":
			oper =new OperationSub();
             break;
             
		case "*":
			oper =new OperationMul();
			break;
		case "/":
			oper =new OperationDiv();
			break;
			
		}
		return oper;
		
	}

}
最后在编写客户端代码:

public class Main {
	
  public static void main(String[] args) {
	  
	  Operation oper ;
	  
	  oper=OperationFactory.createOperate("+");
	  
	  oper.set_numberA(1);
	  
	  oper.set_numberB(2);
	  
	  double result =oper.GetResult();
	  
	  System.out.println(result);
	
}

}

相对于第一种方法来说,也许繁琐了一些,编写了好多个类,但是正因为这么多的类,才把各个功能都分开,并且能够快速的进行二次,三次运算。


这就是简单工厂模式,有一个模式工厂,还有一个样本,通过调用这个工厂,来实现自己的需求。优点在于模块清晰化,每个部分都各司其职,分工明确 。简单的实现了可维

护。但是如果再加入一个开平方的需求,那么就得增加一个开平方的类,在工厂里面添加 case 耦合性还是较高。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值