设计模式—策略模式

1.策略模式是什么?

       策略模式属于对象的行为模式,是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使它们之间可以相互替换,此模式在算法的变化下不会影响到使用算法的客户。

2.策略模式的结构图

       策略模式实际上是对算法的包装,是通过把使用算法和责任算法分开,委派给不同的对象进行管理,通常的做法是把一个系列的算法包转到一系列的策略类中,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一个算法封装起来,使得它们可以互换”。下面就以一个示意性的实现讲解策略模式实例的结构。


Strategy接口是定义所有支持算法的公共接口

public interface Strategy 
{
	public void AlgorithmInterface();
}
ConcreteStrategy封装类具体的算法或者行为

public class ConcreteStrategyA implements Strategy 
{
	public void AlgorithmInterface() 
	{
		System.out.println("算法A实现");
	}

}
public  class ConcreteStrategyB implements Strategy 
{
	public void AlgorithmInterface() 
	{
		System.out.println("算法B实现");
	}

}
public class ConcreteStrategyC implements Strategy 
{
	public void AlgorithmInterface() 
	{
		System.out.println("算法C实现");
	}

}
Context类,通过用一个ContextStrategy方法来配置,维护一个对Strategy对象的引用

public class Context 
{
	private Strategy strategy;
	public Context(Strategy strategy)
	{
		this.strategy = strategy;
	}
	//根据具体的策略对象,调用其算法
	public void ContextInterface()
	{
		strategy.AlgorithmInterface();
	}
}
最后,在客户端具体实现

public class Main 
{
	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();
	}
}
3.总结

       策略模式是一种定义一系列算法的方法,从概念上看所有的这些算法完成的都是相同的工作,只是实现不同而已,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。

       策略模式的重心不是如何实现算法,而是如何组织和调用这些算法,从而让程序结构更加灵活,具有更好的可维护性和可扩展性。策略模式一个很大的特点就是各个策略算法的平等性。对于一系列具体的策略算法,大家的地位是完全一样的,正因为这个平等性,才能实现算法之间可以相互替换。所有的策略算法在实现上也是相互独立的,相互之间是没有依赖的,所以可以这样描述这一系列策略算法:策略算法是相同行为的不同实现。



       以上Demo的源代码地址:点击打开链接











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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值