设计模式之策略模式

上一节我们简单讨论了简单工厂模式,现在我们来看看另外一张设计模式-策略模式,所谓策略模式,就是封装策略,这个策略可以是算法,业务流程等等,只要是类似的东西都可以封装成策略。

我们把上一节的简单工厂修改一下,修改成策略模式

增加一个计算器的类

public class Calculator {
	private Operation oper;
	public Calculator(Operation oper){
		this.oper = oper;
	}
	public double getResult(){
		return oper.getResult();
	}
}

测试类

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Calculator calculator = new Calculator(new Add(30,20));
		System.out.println(calculator.getResult());
	}

}

我们分析一下,简单工厂和策略模式的异同,简单工厂模式,我们必须开放Operation,OperatorFactory,但是在策略模式中,我们只要开放Calculator类(Add可以替换掉)就可以了,其他的策略都可以封闭。

单一的策略模式还是太复杂了(具体策略需要开放,比如add等),我们看看结合简单工厂模式和策略模式会发生什么有趣的现象。

修改一下Calculator为CalculatorFactory

public class CalculatorFactory {
	private Operation oper;
	public CalculatorFactory(String operate,double firstNumber,double secondNumber){
		  switch(operate){
		  case "+": oper = new Add(firstNumber,secondNumber);break;
		  case "-": oper = new Sub(firstNumber,secondNumber);break;
		  case "*": oper = new Mul(firstNumber,secondNumber);break;
		  case "/": oper = new Div(firstNumber,secondNumber);break;
		  }
	}
	public double getResult(){
		return oper.getResult();
	}
}
测试类

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//Calculator calculator = new Calculator(new Add(30,20));
		CalculatorFactory calculator = new CalculatorFactory("+",30,20);
		System.out.println(calculator.getResult());
	}

}

总结:简单工厂+策略模式,对外(调用者)只要一个类就能搞定一切,降低了耦合性。代码更加简洁,这种方式是最常见的方式,只要是关于算法和规则多样性的设计,都可以采用这种方式实现,如果你觉得代码很臃肿,耦合程度很高,不妨小试一下这种方式。不过我觉得swith和if在代码中太碍眼,接下来的讨论中,我们将把swith或者if分支去掉,让代码变得更简洁,美观。


github源码下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值