从零开始学习设计模式——策略模式

写这个模式之前,实在是觉得策略模式和静态工厂模式很像,无非就是从父类中抽象中公用的方法,然后在实体类中重写具体的实现。但其实这两者的区别还是有的,从关注的点来说,静态工厂关注实例化的对象,而策略模式则更关注方法中不同的实现,先上代码吧。

抽象类和实现的实体,与静态工厂一样。

抽象类:

abstract class Operation {
	public abstract void AlgorithmInterface();
}
实现类:

public class OperationAdd extends Operation{

	@Override
	public void AlgorithmInterface() {
		// TODO Auto-generated method stub
		System.out.println("加法运算");
	}

}
public class OperationSub extends Operation {

	@Override
	public void AlgorithmInterface() {
		// TODO Auto-generated method stub
		//减法运算
		System.out.println("减法运算");
	}

}
上下文类:

public class OperationContext {

	private Operation operation;
	
	public OperationContext(String type){
		switch (type) {
		case "add":
			OperationAdd operationAdd = new OperationAdd();
			operation = operationAdd;
			break;
			
		case "sub":
			OperationSub operationSub = new OperationSub();
			operation = operationSub;
			break;

		default:
			break;
		}
	}
	
	public void getResult(){
		operation.AlgorithmInterface();
	}
}

客户端代码:

public class MainClass {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		OperationContext context = new OperationContext("add");
		context.getResult();
	}

}

其实区别最大的就是客户端的部分,我们来对比静态工厂:

public class MainClass {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Operation operation= new OperationFactory.create("add");
	}

}
对于策略模式,我们只需要了解OperationContext这一个类,所有和这个类相关的算法都封装在这个类里,这个类可以看做是所有算法的集合类,而在工厂模式中,除了关注工厂类,还需要关注算法的父类Operation,显然,从算法的角度来说,策略模式的耦合度更低。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值