// test01.cpp : Defines the entry point for the console application.
//
//第一章,设计模式入门,策略模式
#include "stdafx.h"
#include "test01.h"

class FlyBehavior{
public:
    virtual void fly(){};
};

class FlyWithWings:public FlyBehavior{
public:

void fly(){
        printf("i'm flying!!\n");
    }
};

class FlyNoWay : public FlyBehavior
{
public:
    void fly(){
        printf("i can't fly!\n");
    }
};

class QuackBehavior {
public:
    virtual void quack() = 0;
};

class Quack:public QuackBehavior
{
public:
    Quack(){};
    void quack(){
        printf("Quack\n");
    }
};

class MuteQuack : public QuackBehavior
{
public:
    void quack(){
        printf("<Silence>");
    }
};

class Squeak: public QuackBehavior
{
public:
    void quack(){
        printf("Squeak");
    }
};
class Duck
{
public:
    FlyBehavior* flyBehavior;
    QuackBehavior* quackBehavior;

Duck(){};
    virtual void display(){};
    void performFly(){
        flyBehavior->fly();
    }
    void performQuack(){
        quackBehavior->quack();
    }
    void swim(){
        printf("All ducks float,even decoys!");
    }

//动态设定行为
    void setFlyBehavior(FlyBehavior* fb)
    {
        flyBehavior = fb;
    }

void setQuackBehavior(QuackBehavior* qb)
    {
        quackBehavior = qb;
    }

};

class MallardDuck : public Duck
{
public:
    MallardDuck()
    {
        quackBehavior = new Quack();
        flyBehavior = new FlyWithWings();
    }

void display()
    {
        printf("i'm a real Mallard duck");
    }
};

class ModelDuck : public Duck
{
public:
    ModelDuck()
    {
        flyBehavior = new FlyNoWay();
        quackBehavior = new Quack();
    }

void display(){
        printf("i'm a model duck");
    }
};

class FlyRocketPowered : public FlyBehavior{
public:
    void fly()
    {
        printf("i'm flying with a rocket!\n");
    }
};

int _tmain(int argc, _TCHAR* argv[])
{
    Duck* mallard = new MallardDuck();
    mallard->performQuack();
    mallard->performFly();

Duck* model = new ModelDuck();
    model->performFly();
    FlyBehavior* fb = new FlyRocketPowered();
    model->setFlyBehavior(fb);
    model->performFly();
    return 0;
}

设计模式入门,策略模式,c++代码实现的更多相关文章

  1. Head First设计模式 1 设计模式入门 策略模式 观察者模式

    关于基本的OOP特征: OOP的几大特征是抽象 继承 封装 多态. 我们把共同的部分抽象出来作为抽象类的存在,使用继承和接口来实现多态,然后私有的部分封装起来.一定程度上说,这些概念都是简单的设计模式 ...

  2. 设计模式入门,命令模式,c++代码实现

    // test06.cpp : Defines the entry point for the console application.////设计模式第5章 命令模式#include "s ...

  3. 设计模式入门,单件模式,c++代码实现

    // test05.cpp : Defines the entry point for the console application.// #include "stdafx.h" ...

  4. 设计模式入门,工厂模式,c++代码实现

    // test04.cpp : Defines the entry point for the console application.////设计模式第4章 工厂模式#include "s ...

  5. php设计模式之策略模式实例代码

    html <html> <head> <meta charset="UTF-8"> <title>简单计算器</title&g ...

  6. Python设计模式: 最佳的"策略"模式实践代码

    Python设计模式: 最佳的"策略"模式实践代码 今天抽空看了下流畅的python,发现里面介绍了不少python自带的库的使用实例,用起来非常的优雅. 平时用Python来写爬 ...

  7. 设计模式:策略模式(Strategy)

    定   义:它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化, 不会影响到使用算法的客户. 示例:商场收银系统,实现正常收费.满300返100.打8折.......等不同收费 ...

  8. PHP设计模式之策略模式

    前提: 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能.如查 找.排序等,一种常用的方法是硬编码(Hard Cod ...

  9. 乐在其中设计模式(C#) - 策略模式(Strategy Pattern)

    原文:乐在其中设计模式(C#) - 策略模式(Strategy Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 策略模式(Strategy Pattern) 作者:webabc ...

随机推荐

  1. ROS(URDF机器人建模)

    新建功能包mbot_description 在功能包下新建文件config,launch,meshes,urdf. 在launch文件夹下新建文件display_mbot_base_urdf.laun ...

  2. php 递归数据,三维数组转换二维

    public function sortarea($area, $parent_id = 0, $lev = 1){ static $list; foreach($area as $v){ if($v ...

  3. java使用Redis1--安装与简单使用

    环境: CentOS6.4,Redis3.0.3 一.Redis安装(需要安装gcc) 官网http://download.redis.io/releases/redis-3.0.3.tar.gz上下 ...

  4. Jmeter Plugins----- Transactions per Second 配置项

    Jmeter Plugins---version 0.5.5 官方解释: Transactions per Second since 0.3.0 This graph shows the number ...

  5. pixi.js v5版本出了。

    历尽千辛万苦,pixi.js v5版本出了. 请关注群 881784250, 会尽块出个微信小游戏版. pixi.js的每个函数,每个类都有测试用例的.出的版本都是很稳定的.

  6. Django-工程搭建

    -----环境安装 1.创建虚拟环境 mkvirtualenv django_py3_1.11 -p python3   2.安装django pip install django==1.11.11 ...

  7. FPGA实战操作(2) -- PCIe总线(协议简述)

    目录 1. PCIe基础知识 2. 事务层协议 2.1 数据包结构 2.2 帧头含义详述 3. 报文举例 3.1 寄存器读报文 3.2 完成报文 4. 机制简述 4.1 Non-Posted和Post ...

  8. Monkey and Banana

    Monkey and BananaTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  9. 查看哪个用户、IP、什么时间登陆过服务器

    2019-01-07 utmpdump /var/log/wtmp 或者 who /var/log/wtmp

  10. hzjs颠覆jquery,按照中国人思维开发的最简洁的JQUERY替代品更简洁更高效

    颠覆jquery,按照中国人思维开发的最简洁的JQUERY替代品 实现了类似JQUERY的选择器最核心的基本功能 如:$('#image2').attr("src") 另外提供了 ...