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

  • 相关阅读:
    aspscheduler+uwsgi定时任务执行多次
    django定时任务
    django记录用户操作模块
    python缩小图片
    pymysql同时执行多条语句时报错
    MySQL8.0 修改密码
    linux中安装python3
    Mysql高性能
    Mysql高性能
    Mysql高性能
  • 原文地址:https://www.cnblogs.com/SkyMouse/p/2340724.html
Copyright © 2020-2023  润新知