zoukankan      html  css  js  c++  java
  • 行为型模型 策略模式

    行为型模型 策略模式

    Strategy:
            策略(算法)抽象。
    ConcreteStrategy
            各种策略(算法)的具体实现。
    Context
            策略的外部封装类,或者说策略的容器类。根据不同策略执行不同的行为。策略由外部环境决定。
    好处:
            //算法的实现 和 客户端的使用 解耦合
            //使得算法变化,不会影响客户端

    适用于:
            准备一组算法,并将每一个算法封装起来,使得它们可以互换。

    /**
     * 行为型模型 策略模式
     * Strategy模式也叫策略模式是行为模式之一,它对一系列的算法加以封装,为所有算法定义一个抽象的算法接口,并通过继承该抽象算法接口对所有的算法加以封装和实现,具体的算法选择交由客户端决定(策略)。Strategy模式主要用来平滑地处理算法的切换 。
     *
     */
    
    #define _CRT_SECURE_NO_WARNINGS
    
    #include <iostream>
    #include <string>
    #include <list>
    
    
    class Strategy
    {
    public:
        virtual void SymEncrypt() = 0;
        virtual ~Strategy() {}
    };
    
    class Des: public Strategy
    {
    public:
        virtual void SymEncrypt() override
        {
            std::cout << "DES 加密" << std::endl;
        }
    };
    
    class Aes: public Strategy
    {
    public:
        virtual void SymEncrypt() override
        {
            std::cout << "AES 加密" << std::endl;
        }
    };
    
    class Context
    {
    public:
        Context(Strategy * strategy)
        {
            p = strategy;
        }
        void Operator()
        {
            p->SymEncrypt();
        }
    private:
        Strategy *p;
    };
    
    
    void mytest()
    {
        Strategy * strategy = nullptr;
        Context *ctx = nullptr;
    
        strategy = new Des();
        ctx = new Context(strategy);
        ctx->Operator();
        delete strategy;
        strategy = nullptr;
        delete ctx;
        ctx = nullptr;
    
        strategy = new Aes();
        ctx = new Context(strategy);
        ctx->Operator();
        delete strategy;
        strategy = nullptr;
        delete ctx;
        ctx = nullptr;
    
        return;
    }
    
    
    int main()
    {
        mytest();
    
        system("pause");
        return 0;
    }
  • 相关阅读:
    [一步一步MVC]第二回:还是ActionFilter,实现对业务逻辑的统一Authorize处理 OnActionExecuting内如何获取参数
    携程SQL面试题忘大牛解答解决思路
    一些.Net面试题 (BS 方向)
    关于SQL SERVER高并发解决方案
    锁sql server锁
    MSSQL WITH (NOLOCK) 脏读
    python dict的函数
    conda常用命令
    sess.run() 中的fetches和feed_dict
    Tensorflow检验GPU是否安装成功 及 使用GPU训练注意事项
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/7782948.html
Copyright © 2011-2022 走看看