java设计模式--行为型模式--策略模式

策略模式:

  

 1                                                     策略模式
 2  概述
 3     定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。
 4  
 5  适用性
 6     1.许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法。
 7 
 8     2.需要使用一个算法的不同变体。
 9 
10     3.算法使用客户不应该知道的数据。可使用策略模式以避免暴露复杂的、与算法相关的数据结构。
11 
12     4.一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现。
13       将相关的条件分支移入它们各自的Strategy类中以代替这些条件语句。
14  
15  
16  参与者
17     1.Strategy
18       定义所有支持的算法的公共接口。Context使用这个接口来调用某ConcreteStrategy定义的算法。


19 20 2.ConcreteStrategy 21 以Strategy接口实现某具体算法。 22 23 3.Context 24 用一个ConcreteStrategy对象来配置。 25 维护一个对Strategy对象的引用。 26 可定义一个接口来让Stategy访问它的数据。


测试类:

 1 public class Test {
 2     
 3     public static void main(String[] args) {
 4         Context ctx = new Context(new StrategyImplA());
 5         ctx.doMethod();
 6         
 7         ctx = new Context(new StrategyImplB());
 8         ctx.doMethod();
 9         
10         ctx = new Context(new StrategyImplC());
11         ctx.doMethod();
12     }
13 }
 1 public class Context {
 2 
 3     Strategy stra;
 4     
 5     public Context(Strategy stra) {
 6         this.stra = stra;
 7     }
 8     
 9     public void doMethod() {
10         stra.method();
11     }
12 }
1 public abstract class Strategy {
2 
3     public abstract void method();
4 }
1 public class StrategyImplA extends Strategy {
2 
3     public void method() {
4         System.out.println("这是第一个实现");
5     }
6 }
1 public class StrategyImplB extends Strategy {
2 
3     public void method() {
4         System.out.println("这是第二个实现");
5     }
6 }
1 public class StrategyImplC extends Strategy {
2 
3     public void method() {
4         System.out.println("这是第三个实现");
5     }
6 }

大神写的代码就是不一样。策略模式用的是组合的方法,将一组行为抽象为对象,通过拼装来实现,适应动态修改算法变化情况。

 
原文地址:https://www.cnblogs.com/huzi007/p/3988303.html