设计模式[7]-Strategy

Type: Behavioral

Strategy模式:定义一系列的算法,封装每一个,使他们实现通用。让算法相对于使用他的clients可以独立地变化。

#include <iostream>
using namespace std;  

class Strategy
{
public:
    virtual void execute() = 0;
};   

class ConcreteStrategyA: public Strategy
{
public:
    void execute()
    {
        cout<<"ConcreteStrategyA executed"<<endl;
    }
};  

class ConcreteStrategyB: public Strategy
{
public:
    void execute()
    {
        cout<<"ConcreteStrategyB executed"<<endl;
    }
};  

class Context
{
public:
    Context (Strategy* pStrategy): m_pStrategy(pStrategy){};
    void setStrategy(Strategy* pStrategy)
    {
        m_pStrategy = pStrategy;
    }
    void invoke()
    {
        if(m_pStrategy != NULL)
            m_pStrategy->execute();
    }
private:
    Strategy* m_pStrategy;
};  

int main()
{
    Strategy* pStrategy = new ConcreteStrategyA();
    Context*  pContext  = new Context(pStrategy);
    pContext->invoke();
    pStrategy = new ConcreteStrategyB();
    pContext->setStrategy(pStrategy);
    pContext->invoke();  

    system("pause");
    return 0;
}
时间: 2024-08-30 16:42:41

设计模式[7]-Strategy的相关文章

Java设计模式之Strategy(策略)模式

Strategy是属于设计模式中 对象行为型模式,主要是定义一系列的算法,把这些算法一个个封装成单独的类. Stratrgy应用比较广泛,比如,公司经营业务变化图,可能有两种实现方式,一个是线条曲线,一个是框图(bar),这是两种算法,可以使用Strategy实现. 这里以字符串替代为例, 有一个文件,我们需要读取后,希望替代其中相应的变量,然后输出.关于替代其中变量的方法可能有多种方法,这取决于用户的要求,所以我们要准备几套变量字符替代方案. 首先,我们建立一个抽象类RepTempRule 定

Java设计模式之Strategy模式_java

基于有了OO的基础后,开始认真学习设计模式!设计模式是java设计中必不可少的! Apple.java package strategy; /** * * @author Andy * */ public class Apple implements Discountable { //重量 private double weight; //单价 实际开发中 设计金钱等精确计算都是BigDecimal; private double price; //按购买量打折 // private Disco

设计模式(Patterns in Java)

设计 板桥里人的设计模式讲解是国内媒体(包括书籍和网站)中最早的成体系介绍,本系列介绍纯为免费传播(转载本站文章,请保留作者和网址),尽量做到言简意赅,通俗易懂,但是难免有所疏漏敬请来信或论坛讨论,不断完善. 真正掌握设计模式需要在实践中不断研究和使用,关于设计模式在具体实例的应用,可以阅读板桥里人的书籍<Java实用系统开发指南>.书籍中8个实例都从设计模式.框架等高度对系统进行崭新的设计和实现,这种应用理念正是现在以及将来软件设计和编程的根本之道. 1:前言 学习GoF设计模式的重要性 建

Java设计模式学习心得

整个设计模式贯穿一个原理:面对介面编程,而不是面对实现,(面向物件编程应该改爲面向介面编程).目标原则是:降低耦合,增强灵活性. 一.创建模式 1.设计模式之Factory(工厂方法和抽象工厂) 使用工厂模式就象使用new一样频繁. 2.设计模式之Prototype(原型) 用原型实例指定创建物件的种类,並且通过拷贝这些原型创建新的物件. 3.设计模式之Builder 汽车由车轮 方向盘 发动机很多部件组成,同时,将这些部件组装成汽车也是一件複杂的工作,Builder模式就是将这两种情况分开进行

介绍几本学习ASP.NET 2.0的书

asp.net ASP.NET 2.0其实已经出来挺长时间了,但国内关于ASP.NET 2.0的书似乎很少.前几天特意关注了一下ASP.NET 2.0的书,有些感想,和大家分享. 如果你是一个对ASP.NET 2.0很关注的人,那么一定不会没有听说过Dino Esposito这个名字.他写了两本关于ASP.NET 2.0的书,<Programming Microsoft ASP.NET 2.0: Core Reference>和<Programming Microsoft ASP.NET

Design Patterns: Solidify Your C# Application Arch

Design Patterns: Solidify Your C# Application Architecture with Design Patterns中文版(下篇)    optimizer(翻译)   关键字     设计模式 singleton strategy decorator composite state   出处     http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnmag01/html

设计模式学习笔记(三)—-Strategy策略模式

GOF<设计模式>一书对Strategy模式是这样描述的: 定义一系列的算法,把他们一个个封装起来,并且使它们可相互替换.Strategy模式使算法可独立于使用它的客户而变化. Strategy模式以下列几条原则为基础: 1)每个对象都是一个具有职责的个体. 2)这些职责不同的具体实现是通过多态的使用来完成的. 3)概念上相同的算法具有多个不同的实现,需要进行管理. 下面我将通过一个实例来说明它的具体使用,这个例子是关于数据库连接的.代码如下: interface DatabaseStrate

设计模式(一):“穿越火线”中的“策略模式”(Strategy Pattern)

在前段时间呢陆陆续续的更新了一系列关于重构的文章.在重构我们既有的代码时,往往会用到设计模式.在之前重构系列的博客中,我们在重构时用到了"工厂模式"."策略模式"."状态模式"等.当然在重构时,有的地方没有点明使用的是那种设计模式.从今天开始,我们就围绕着设计模式这个主题来讨论一下我们常用的设计模式,当然"GoF"的23种设计模式不会全部涉及到,会介绍一些常见的设计模式.在接下来我们要分享的设计模式这个系列博客中,还是以Swi

设计模式 ( 十八 ) 策略模式Strategy(对象行为型)

设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述         在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能.如查找.排序等,一种常用的方法是硬编码(Hard Coding)在一个类中,如需要提供多种查找算法,可以将这些算法写到一个类中,在该类中提供多个方法,每一个方法对应一个具体的查找算法:当然也可以将这些查找算法封装在一个统一的方法中,通过if-else-或者case等条件判断语