行为型模型 策略模式

行为型模型 策略模式

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;
}
时间: 2024-08-29 22:35:36

行为型模型 策略模式的相关文章

行为型模型 迭代器模式

行为型模型 迭代器模式 GOOD:提供一种方法顺序访问一个聚敛对象的各个元素,而又不暴露该对象的内部表示. 为遍历不同的聚集结构提供如开始,下一个,是否结束,当前一项等统一接口. Iterator(迭代器接口):         该接口必须定义实现迭代功能的最小定义方法集         比如提供hasNext()和next()方法. ConcreteIterator(迭代器实现类):         迭代器接口Iterator的实现类.可以根据具体情况加以实现. Aggregate(容器接口)

行为型模型 模版模式

行为型模型 模版模式 应用场景 Template Method模式一般应用在具有以下条件 的应用中:        - 具有统一的操作步骤或操作过程         - 具有不同的操作细节         - 存在多个具有同样操作步骤的应用场景,但某些具体的操作细节却各不相同总结:        在抽象类中统一操作步骤,并规定好接口:让子类实现接口.这样可以把各个具体的子类和操作步骤接耦合 AbstractClass:        抽象类的父类 ConcreteClass:         具

行为型模型 状态模式

行为型模型 状态模式 Context:用户对象        拥有一个State类型的成员,以标识对象的当前状态: State:接口或基类         封装与Context的特定状态相关的行为: ConcreteState:接口实现类或子类         实现了一个与Context某个状态相关的行为. 适用于:         对象的行为,依赖于它所处的当前状态.行为随状态改变而改变的场景. /** * 行为型模型 状态模式 * State模式也叫状态模式,是行为设计模式的一种. * St

行为型模型 命令模式

行为型模型 命令模式 Command         Command命令的抽象类. ConcreteCommand         Command的具体实现类. Receiver         需要被调用的目标对象. Invorker         通过Invorker执行Command对象. 适用于:         是将一个请求封装为一个对象,从而使你可用不同的请求对客户端进行参数化:对请求排队或记录请求日志,以及支持可撤销的操作. /** * 行为型模型 命令模式 * Command模

行为型模型 备忘录模式

行为型模型 备忘录模式 应用场景 如果一个对象需要保存状态并可通过undo或rollback等操作恢复到以前的状态时,可以使用Memento模式. 1)一个类需要保存它的对象的状态(相当于Originator角色) 2)设计一个类,该类只是用来保存上述对象的状态(相当于Memento角色) 3)需要的时候,Caretaker角色要求Originator返回一个Memento并加以保存 4)undo或rollback操作时,通过Caretaker保存的Memento恢复Originator对象的状

设计模式(行为型)之策略模式(Strategy Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 阅读前一篇<设计模式(行为型)之迭代器模式(Iterator Pattern)>http://blog.csdn.net/yanbober/article/details/45497881 概述 使用策略模式可以定义一些独立的类来封装不同的算法,每一个类封装一种具体的算法,在这里,每一个封

设计模式(行为型)之迭代器模式(Iterator Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 阅读前一篇<设计模式(行为型)之观察者模式(Observer Pattern)>http://blog.csdn.net/yanbober/article/details/45484749 概述 在软件构建过程中,集合对象内部结构常常变化各异.但对于这些集合对象,我们希望在不暴露其内部结构

设计模式(行为型)之命令模式(Command Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 阅读前一篇<设计模式(行为型)之策略模式(Strategy Pattern)>http://blog.csdn.net/yanbober/article/details/45498567 概述 在软件开发中,我们经常需要向某些对象发送请求(调用其中的某个或某些方法),但是并不知道请求的接收

设计模式-行为型模式-策略模式

策略模式 在实际工作中我用到了策略模式,但为什么要有环境角色呢? 这里我贴上英文对含义的介绍, The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it. 然后看看这种设计模式的组成, 一般的,策略模式