设计模式学习笔记-策略模式
<div id="cnblogs_post_body">1. 概述它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化不会影响到使用算法的客户端。
2. 模式中的角色
2.1 策略类(Stratege):定义所有支持的算法的公共接口。
2.2 具体策略类(Concrete Stratege):封装了具体的算法或行为,继承于Stratege类。
2.3 上下文类(Context):用一个ConcreteStratege来配置,维护一个对Stratege对象的引用。
3. 模式解读
3.1 策略模式的一般化类图
http://pic002.cnblogs.com/images/2012/155937/2012070310013466.png
3.2 策略模式的代码实现
<div class="cnblogs_code"> /// <summary> /// 策略类,定义了所有支持的算法的公共接口 /// </summary> public abstract class Stratege { /// <summary> /// 策略类中支持的算法,当然还可以有更多,这里只定义了一个。 /// </summary> public abstract void Algorithm(); } /// <summary> /// 具体策略 A,实现了一种具体算法 /// </summary> public class ConcreteStrategeA : Stratege { /// <summary> /// 具体算法 /// </summary> public override void Algorithm() { // 策略A中实现的算法 } } /// <summary> /// 具体策略 B,实现了一种具体算法 /// </summary> public class ConcreteStrategeB : Stratege { /// <summary> /// 具体算法 /// </summary> public override void Algorithm() { // 策略B中实现的算法 } } /// <summary> /// Context 上下文,维护一个对Stratege对象的引用 /// </summary> public class Context { private Stratege m_Stratege; /// <summary> /// 初始化上下文时,将具体策略传入 /// </summary> /// <param name="stratege"></param> public Context(Stratege stratege) { m_Stratege = stratege; } /// <summary> /// 根据具体策略对象,调用其算法 /// </summary> public void ExecuteAlgorithm() { m_Stratege.Algorithm(); } }
页:
[1]