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;
    }
  • 相关阅读:
    Microsoft Visual Studio 2008
    JavaScript动态添加|绑定事件
    超级实的js代码大全 [转]
    《dojo 边学边用》(02), djConfig配置解说
    整合ckeditor_3.0.1和ckfinder_aspnet_1.4.1.1,配置随笔记录
    everybody is a tourist。you and me。
    测试并提升你的jQuery选择器水平
    php
    《dojo 边学边用》(01), 初识dojo,dojo简介和框架概览
    HTML 三栏自动适应
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/7782948.html
Copyright © 2011-2022 走看看