一、策略模式定义
策略模式(Strategy)属于对象行为型设计模式,策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式把行为和环境分开。环境类负责维持和查询行为类,各种算法在具体的策略类中提供。由于算法和环境独立开来,算法的增减,修改都不会影响到环境和客户端。有一下几条原则:
二、核心概念和用法
策略模式主要用到了三个核心的OOP概念:封装、继承和多态。还包含了一些基本的设计原则:1)封装变化。2)多用组合,少用继承。3)针对接口编程,不针对实现编程。
此模式的适用场景是:当一个类的某些行为将会经常发生变化或者在运行时需要改变时,可以使用策略模式。
这个模式的核心是把类的变化行为提取为一个接口,然后将类的变化部分用这个接口对象代替,也即声明为这个接口的一个属性,然后增加一个设置这个接口的方法,以便以后修改这个类的具体行为,这样这个类可以不用管这个变化行为的具体实现,将实现委托给这个接口的具体实现。而关于这个接口的一系列实现,可以看成是一族算法。这样就实现了将类中变化的部分封装,算法的使用跟算法的实现分离,算法被提取出来之后还可以更好的进行复用。
三、模式参与者
下面快速浏览一下这个模式主要参与者:
定义了所有需要继承这个类的子类的属性跟方法,并且定义了改变这个父类变化行为的方法
定义了具体行为的方法声明,由这个接口的实现类来具体实现接口定义的行为方法。
一组具体的算法接口实现类,代表不同的行为。
负责创建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。 概念上相同的算法具有多种不同的实现,需要进行管理
分享到:
相关推荐
用c++实现的headfirst策略设计模式。并附加对应的类图。
设计模式之一:策略模式。代码来源于Head First设计模式。
springmvc +mybatis采用策略设计模式基于拦截器实现按年分表
loki库采用了高强度的c++模板设计,能充分的体现基于策略的设计模式。
代码为博客的例子,详细讲解参考:http://blog.csdn.net/lmj623565791/article/details/24116745 有问题请留言
NULL 博文链接:https://zmx.iteye.com/blog/373078
设计模式中的策略模式。根据《设计模式》一书编写
这是策略模式中的一个经典实例,通过鸭子问题,能让学习者更好的了解设计模式,这也是headfirst 设计模式中用的经典实例
设计模式--策略模式java例子
设计模式之禅之 工厂方法模式+策略模式 设计模式之禅之 工厂方法模式+策略模式
通过学习如何在代码中使用设计模式,可以更高效地构建服务器端应用,在这个过程中,你的PHP编程水平也将逐步提高。...第12章 策略设计模式的灵活性 第13章 职责链设计模式 第14章 利用观察者模式构建多设备CMS
策略模式实例策略模式实例策略模式实例策略模式实例策略模式实例
Java 经典设计模式讲解以及项目实战 设计模式简介:主要介绍各种设计模式的概念和运用场景等 设计模式综合运用:主要是笔者在实际工作中运用到的一些设计模式综合运用事例的提炼 Spring设计模式简介:主要是讲述...
c++设计模式-行为型模式-策略模式;qt工程;c++简单源码; 策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于...
设计模式 ——策略模式 实验报告 详细代码 设计概要都有
设计模式-策略模式源代码 .net,策略模式,模式,设计模式 文件包中有UML策略模式详解图
这是一个基于JAVA的策略设计模式。松耦合,可扩展
走进设计模式之 策略模式(Strategy) 代码