`

策略设计模式

    博客分类:
  • java
 
阅读更多

一、策略模式定义
策略模式(Strategy)属于对象行为型设计模式,策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式把行为和环境分开。环境类负责维持和查询行为类,各种算法在具体的策略类中提供。由于算法和环境独立开来,算法的增减,修改都不会影响到环境和客户端。有一下几条原则:

二、核心概念和用法

    策略模式主要用到了三个核心的OOP概念:封装、继承和多态。还包含了一些基本的设计原则:1)封装变化。2)多用组合,少用继承。3)针对接口编程,不针对实现编程。

    此模式的适用场景是:当一个类的某些行为将会经常发生变化或者在运行时需要改变时,可以使用策略模式。

    这个模式的核心是把类的变化行为提取为一个接口,然后将类的变化部分用这个接口对象代替,也即声明为这个接口的一个属性,然后增加一个设置这个接口的方法,以便以后修改这个类的具体行为,这样这个类可以不用管这个变化行为的具体实现,将实现委托给这个接口的具体实现。而关于这个接口的一系列实现,可以看成是一族算法。这样就实现了将类中变化的部分封装,算法的使用跟算法的实现分离,算法被提取出来之后还可以更好的进行复用。

模式参与者

下面快速浏览一下这个模式主要参与者:

  • Context超类

定义了所有需要继承这个类的子类的属性跟方法,并且定义了改变这个父类变化行为的方法

  • 算法接口

定义了具体行为的方法声明,由这个接口的实现类来具体实现接口定义的行为方法。

  • 具体算法类

一组具体的算法接口实现类,代表不同的行为。

  • 客户类(Client Class)

负责创建Context类的实例,并负责创建算法的实现的实例,然后赋给Context类实例的正确算法实现对象。

 

四、策略模式类图

  

  下面是简单的例子:

   1.超类,即接口

   public interface IStrategy{

public void operate();

   }

  2.具体操作类1

    public class   A implements  IStrategy{

        public void operate(){

           System.out.println("A操作");

        }

    }

  3.封装类

 

   public class Context{

     Istrategy is;

     public Context(Istrategy is){

          this.is= is;

    }

     public void operate(){

          this.is.operate();

    }

   }

4.客户端代码

  public class Client{

     public static void main(String args[]){

         Context con1 = new Context(new A());

         con1.operate();

 

        Context  con2 = new Context(new B());

        con2.operate();

     }

  }

具体操作类2

    public class   B implements  IStrategy{

        public void operate(){

           System.out.println("B操作");

        }

    }

1.        每个对象都是具有职责的个体

2.        这些职责不同的具体实现是通过多态的使用来完成的

         3。   概念上相同的算法具有多种不同的实现,需要进行管理

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics