`

设计模式之策略模式

阅读更多
策略模式:它定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户。
具体详见附件:
package hx.designpattern.strategy;

public abstract class Strategy {

	public abstract void algorithmInterface();
}

package hx.designpattern.strategy;

public class ConcreteStrategyA extends Strategy {

	@Override
	public void algorithmInterface() {
		System.out.println("ConcreteStrategyA");
	}

}

package hx.designpattern.strategy;

public class ConcreteStrategyB extends Strategy {

	@Override
	public void algorithmInterface() {
		System.out.println("ConcreteStrategyB");
	}

}

package hx.designpattern.strategy;

public class ConcreteStrategyC extends Strategy {

	@Override
	public void algorithmInterface() {
		System.out.println("ConcreteStrategyC");
	}

}

package hx.designpattern.strategy;

public class Context {
	
	private Strategy strategy;
	
	public Context(Strategy strategy){
		this.strategy = strategy;
	}
	
	public void contextInterface(){
		this.strategy.algorithmInterface();
	}

}

package hx.designpattern.strategy;

public class Client {

	public static void main(String[] args) {
		Context context;
		
		context = new Context(new ConcreteStrategyA());
		context.contextInterface();
		
		context = new Context(new ConcreteStrategyB());
		context.contextInterface();
		
		context = new Context(new ConcreteStrategyC());
		context.contextInterface();
	}
}

策略模式的优点:
1、是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,这是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合
2、策略模式的Strategy类层次为Context定义了一系列的可供重用的算法或行为。继承有助于析取出这些算法中的公共功能
3、简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试


上面的实例代码中Context的构造函数中传入的是一个Strategy,而实际上我们一般会传入一个条件值,构造方法内部根据这个条件值来选择实例化哪种Strategy,相当于把客户端判断哪种Strategy的逻辑放到了Context的构造函数中了
  • 大小: 62.5 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics