zoukankan      html  css  js  c++  java
  • 设计模式学习—Strategy(策略)

    意图:定义一系列的算法,把他们一一封装起来,使得他们可以互相替代,使得算法可以独立于对象的变化

    适用性:

    • 许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法。
    • 需要使用一个算法的不同变体。例如,你可能会定义一些反映不同的空间/时间权衡的算法。当这些变体实现为一个算法的类层次时[ H O 8 7 ] ,可以使用策略模式。
    • 算法使用客户不应该知道的数据。可使用策略模式以避免暴露复杂的、与算法相关的数据结构。
    • 一个类定义了多种行为, 并且这些行为在这个类的操作中以多个条件语句的形式出现。将相关的条件分支移入它们各自的S t r a t e g y 类中以代替这些条件语句。

    示例图:

    示例代码:

    class CBaseStrategy
    {
    public:
        CBaseStrategy(void);
    public:
        ~CBaseStrategy(void);
        public:
        virtual void DoAlg()=0;
    };

    class CSecondStrategy:public CBaseStrategy
    {
    public:
        CSecondStrategy(void);
    public:
        ~CSecondStrategy(void);
    public:
        virtual void DoAlg();
    };

    class CFirstStrategy:public CBaseStrategy
    {
    public:
        CFirstStrategy(void);
    public:
        ~CFirstStrategy(void);
        public:
        virtual void DoAlg();
    };

    //测试代码

    CBaseStrategy* pStragey = new CFirstStrategy();
    CContext* pContext = new CContext(pStragey);
    pContext->Execute();
    delete pStragey;
    delete pContext;
    pStragey = new CSecondStrategy();
    pContext = new CContext(pStragey);
    pContext->Execute();

  • 相关阅读:
    好用的jsDelivr
    纯css实现图片或者页面变灰色
    三元表达式的连写
    markdown常用语法小结
    vue中的事件修饰符
    ES6笔记一
    less使用小结
    flex布局小结
    所思所想,关于坚持
    前端渲染图片报403问题解决方案
  • 原文地址:https://www.cnblogs.com/SkyMouse/p/2340724.html
Copyright © 2011-2022 走看看