• 设计模式学习—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();

  • 相关阅读:
    npm镜像切换
    vue组件样式覆盖问题-module
    实现微信小程序多文件同时上传,并且携带参数
    提交现有代码到gitee
    富文本框 字段存入数据库
    js动态添加 <select>标签disable属性
    validate验证,rules属性名为特殊属性名
    springboot themleaf ajax总结
    th:field,th:value
    直接在页面上显示当前年份
  • 原文地址:https://www.cnblogs.com/SkyMouse/p/2340724.html
Copyright © 2020-2023  润新知