设计模式学习笔记之策略模式

策略模式,是对一系列的算法进行了封装,使得它们之间可以相互替换。(神一般的语言,我真的无法体会)

示例代码如下:

package StrategyPolicy;
public interface IAlgorithm {

	public void describe();
}

然后有三个alogrithm分别实现此接口:

package StrategyPolicy;

public class Algorithm1 implements IAlgorithm{

	public void describe() {
		
		System.out.println("algorithm1.");
	}
}


 

package StrategyPolicy;

public class Algorithm2 implements IAlgorithm{

	public void describe() {
		
		System.out.println("algorithm2.");
	}
}


 

package StrategyPolicy;

public class Algorithm3 implements IAlgorithm{

	public void describe() {
		
		System.out.println("algorithm3");
	}
}


然后有个Context负责调用:

package StrategyPolicy;

public class AlgorithmContext {

	private IAlgorithm algorithm;
	
	public AlgorithmContext(int index){
		
		switch(index){
		
		case 1:this.algorithm = new Algorithm1();break;
		case 2:this.algorithm = new Algorithm2();break;
		case 3:this.algorithm = new Algorithm3();break;
		}
	}
	
	public void describe() {
		
		algorithm.describe();
	}
}

 

接下来就是测试策略模式的代码:

package StrategyPolicy;

public class StrategyPolicyTest {

	public static void main(String[] args){
		
		AlgorithmContext ctx1 = new AlgorithmContext(1);		
		ctx1.describe();

		AlgorithmContext ctx2 = new AlgorithmContext(2);		
		ctx2.describe();
		
		AlgorithmContext ctx3 = new AlgorithmContext(3);		
		ctx3.describe();
	}
}


反正我觉得策略模式和简单工厂还是挺像的,但是仔细想想,还是有差别:

如果是使用简单工厂的话,应该是这样写的:

public IAlgorithm getAlgorithm(int type){

 

     //根据type,return 具体的Algorithm

}

然后,在测试的类中,直接用IAlgorithm的引用来接具体的Algorithm的对象,在利用这个引用调用describe方法。

感觉策略模式,就是将Algorithm连接口都不暴露给你了,直接根据你的要求,在Context里面进行使用。更加屏蔽了内部的细节。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值