`

策略设计模式

    博客分类:
  • 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。   概念上相同的算法具有多种不同的实现,需要进行管理

分享到:
评论

相关推荐

    策略设计模式简单代码实现

    策略设计模式是软件工程中的一种行为设计模式,它使你能在运行时改变对象的行为。在策略模式中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为模式。 在策略模式中,我们创建表示各种策略的...

    策略设计模式_构建公共通用的Dao

    标题中的“策略设计模式_构建公共通用的Dao”指出,我们即将探讨的是如何利用策略设计模式来构建一个可复用的、通用的数据访问对象(DAO)层。在软件开发中,DAO层通常负责与数据库进行交互,执行增删改查等操作。...

    Head first C++策略设计模式

    在这个特定的压缩包中,我们关注的是“策略设计模式”的实现。策略设计模式是一种行为设计模式,它允许在运行时动态地改变对象的行为。 策略模式的核心思想是将算法族封装到各自独立的类中,使得它们可以互换使用。...

    loki 库 源码 策略设计模式

    《洛基库(Loki)源码解析:策略设计模式的深度探究》 洛基库(Loki)是一个由C++编程语言实现的开源库,它以其强大的模板设计能力而闻名,尤其在策略设计模式的应用上表现突出。该库不仅为开发者提供了多种实用的...

    使用策略设计模式在OpenCV中实现颜色识别的功能(包含详细的完整的程序和数据)

    内容概要:这篇文章介绍了一种利用策略设计模式与OpenCV在Python环境里构建颜色检测系统的实现方法。主要介绍了创建支持自定义颜色目标及容差的检测系统的具体过程和代码细节,并指出了该系统可进一步改进的方向。 ...

    基于C#.NET异步图形验证码识别组件(集成了若快、优优云、打码兔、云打码等平台,准确率95%,速度2-6秒)采用策略设计模式

    【作品名称】:基于C#.NET异步图形验证码识别组件(集成了若快、优优云、打码兔、云打码等平台,准确率95%,速度2-6秒)采用策略设计模式 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设...

    springmvc +mybatis采用策略设计模式基于拦截器实现按年分表

    本项目将这两种技术结合,并利用策略设计模式和拦截器来实现一个按年份划分的数据库分表策略。下面将详细阐述这个项目中的核心知识点。 1. **SpringMVC**: SpringMVC是Spring框架的一部分,它是一个模型-视图-...

    Java 设计模式 策略模式

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Java中,策略模式主要通过定义一系列的算法,并将每一个算法封装起来,使它们可以互相替换,让算法独立于使用它的客户而变化。 首先,策略模式的...

    设计模式之策略模式 鸭子问题

    设计模式之策略模式 鸭子问题 策略模式是一种经典的设计模式,通过鸭子问题,可以让学习者更好地了解设计模式的概念和实现。策略模式的主要思想是定义一系列的算法,并将每一个算法封装起来,使它们可以相互替换。...

    php设计模式案例详解

    21. **策略设计模式**:定义一系列的算法,并将每一个算法封装起来,使得它们可以互相替换。策略模式让算法的变化独立于使用算法的客户。 以上就是PHP设计模式的一些核心概念和应用场景,每个模式都有其独特的优点...

    设计模式之策略模式

    设计模式中的策略模式。根据《设计模式》一书编写

    Java 经典设计模式讲解以及项目实战

    Java 经典设计模式讲解以及项目实战 设计模式简介:主要介绍各种设计模式的概念和运用场景等 设计模式综合运用:主要是笔者在实际工作中运用到的一些设计模式综合运用事例的提炼 Spring设计模式简介:主要是讲述...

    设计模式-策略者

    "策略者"(Strategy)设计模式是其中的一种行为模式,它定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。这种模式让算法的变化独立于使用算法的客户。 在《设计模式-策略者》这篇文章中,作者深入浅...

    GuitarHero:策略设计模式演示

    《策略设计模式在Java编程中的应用——以"吉他英雄"为例》 策略设计模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Java编程中,这种模式的应用广泛且强大,尤其在处理需要动态变化算法或者行为的场景...

    设计模式--策略模式java例子

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Java中,策略模式通常用于替换硬编码的条件语句,使代码更加灵活、可扩展和易于维护。下面我们将详细探讨策略模式的核心概念、实现方式以及在实际...

    设计模式解读之--策略模式.pdf

    ### 设计模式解读之策略模式 #### 模式定义与核心思想 策略模式是一种行为设计模式,它使得算法可以独立于使用它的客户而变化。在软件工程中,策略模式允许一组算法封装成一系列的类,它们共享相同的接口,但内部...

    Learning+PHP设计模式

    通过学习如何在代码中使用设计模式,可以更高效地构建服务器端应用,在这个过程中,你的PHP编程水平也将逐步提高。...第12章 策略设计模式的灵活性 第13章 职责链设计模式 第14章 利用观察者模式构建多设备CMS

Global site tag (gtag.js) - Google Analytics