实现 : Defferent Heros attack Defferently. - 不同的英雄使用不用的招数

Strategy设计的思路:

基类A。更加小的基类B,新的继承类C:

1 从基类A中抽出一个更加小的基类B

2 利用这个更加小的基类B实现不同的效果

3 把这个更加小的基类B包括进基类A中去

4 新的继承类C仅仅须要和基类A打交道,设计不同行为,不须要理会更加小的基类B

#pragma once
#ifndef _STRATEGY_HEROS_H
#define _STRATEGY_HEROS_H #include <stdio.h> //Interface
class HeroAttack
{
public:
virtual void attack() = 0;
}; //Base method class
class Laser : public HeroAttack
{
public:
void attack()
{
puts("Super Eye-Laser");
}
}; class Smash : public HeroAttack
{
public:
void attack()
{
puts("I smash!");
}
}; class WebWebWeb : public HeroAttack
{
public:
void attack()
{
puts("Web, Web, Web!");
}
}; //Base Class
class Hero_From_Marvel
{
HeroAttack *heroAtt;
protected:
void setAttackWay(HeroAttack *hat)
{
if (heroAtt) delete heroAtt;
heroAtt = hat;
}
public:
Hero_From_Marvel() : heroAtt(nullptr)
{
} virtual ~Hero_From_Marvel()
{
if (heroAtt) delete heroAtt;
heroAtt = nullptr;
} void attack()
{
heroAtt->attack();
}
}; //derived class
class SuperMan : public Hero_From_Marvel
{
public:
SuperMan()
{
setAttackWay(new Laser);//这里不能使用malloc,否则内存冲突
}
}; class Hulk : public Hero_From_Marvel
{
public:
Hulk()
{
setAttackWay(new Smash);
}
}; class SpiderMan : public Hero_From_Marvel
{
public:
SpiderMan()
{
setAttackWay(new WebWebWeb);
}
}; int StrategyHerosRun()
{
const int HEROS = 3;
Hero_From_Marvel *hfm[HEROS] = {new SuperMan, new Hulk, new SpiderMan};
for (int i = 0; i < HEROS; i++)
{
hfm[i]->attack();
delete hfm[i];
}
return 0;
} #endif

Design Pattern 设计模式1 - Strategy 1的更多相关文章

  1. Composite Design Pattern 设计模式组合

    设计模式组合,它能够更类组合在一类,形成一个树状结构. #include <set> #include <iostream> #include <string> u ...

  2. Design Principle vs Design Pattern 设计原则 vs 设计模式

    Design Principle vs Design Pattern设计原则 vs 设计模式 来源:https://www.tutorialsteacher.com/articles/differen ...

  3. 说说设计模式~大话目录(Design Pattern)

    回到占占推荐博客索引 设计模式(Design pattern)与其它知识不同,它没有华丽的外表,没有吸引人的工具去实现,它是一种心法,一种内功,如果你希望在软件开发领域有一种新的突破,一个质的飞越,那 ...

  4. 设计模式(Design Pattern)系列之.NET专题

    最近,不是特别忙,重新翻了下设计模式,特地在此记录一下.会不定期更新本系列专题文章. 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结. 使用 ...

  5. java设计模式大全 Design pattern samples in Java(最经典最全的资料)

    java设计模式大全 Design pattern samples in Java(最经典最全的资料) 2015年06月19日 13:10:58 阅读数:11100 Design pattern sa ...

  6. 简单工厂设计模式(Simple Factory Design Pattern)

    [引言]最近在Youtub上面看到一个讲解.net设计模式的视频,其中作者的一个理解让我印象很深刻:所谓的设计模式其实就是运用面向对象编程的思想来解决平时代码中的紧耦合,低扩展的问题.另外一点比较有见 ...

  7. 巧用代理设计模式(Proxy Design Pattern)改善前端图片加载体验

    这篇文章介绍一种使用代理设计模式(Proxy Design Pattern)的方法来改善您的前端应用里图片加载的体验. 假设我们的应用里需要显示一张尺寸很大的图片,位于远端服务器.我们用一些前端框架的 ...

  8. 设计模式-模板方法设计模式--Template Method design pattern

    /** * Abstract implementation of the {@link org.springframework.context.ApplicationContext} * interf ...

  9. [转]Design Pattern Interview Questions - Part 3

    State, Stratergy, Visitor Adapter and fly weight design pattern from interview perspective. (I) Can ...

随机推荐

  1. ospf 提升 二 ---LSA

    ospf ABR和ASBR的区别 官方建议中大型网络的规模参考   根据spf算法   而不是路由器的硬件性能强弱 a ABR最多关联3个区域 b 单区域内路由器最多50台 c 一台运行ospf的路由 ...

  2. NYOJ 7 街区最短路径问题

    街区最短路径问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 一个街区有很多住户,街区的街道只能为东西.南北两种方向. 住户只可以沿着街道行走. 各个街道之间的间 ...

  3. Leetcode 375.猜数字大小II

    猜数字大小II 我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字,你来猜我选了哪个数字. 每次你猜错了,我都会告诉你,我选的数字比你的大了或者小了. 然而,当你猜了数字 x ...

  4. 九度oj题目1009:二叉搜索树

    题目描述: 判断两序列是否为同一二叉搜索树序列 输入:                        开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接 ...

  5. 转载:CMarkUp使用简介

    转载地址:http://blog.csdn.net/jonathandj/article/details/4320725 最近正在研究C++下的XML分析工具CMarkup.初次和XML相遇是基于C# ...

  6. VMware---之网卡设置

    闲来无事,扯点皮,详细说下NAT配置过程 NAT全称Network Address Translation网络地址转换,顾名思义,配置的重点也是地址转换. 步骤1.配置局域网段及网关 打开vmware ...

  7. C# 编程中的堆栈(Stack)和队列(Queue)

    一.什么是堆?(Heap)      堆是无序的,是一片不连续的内存域,由用户自己来控制和释放,如果用户自己不释放的话,当内存达到一定的特定值时,通过垃圾回收器(GC)来回收.      是程序运行期 ...

  8. 树莓派LED指示灯说明

    原文:http://shumeipai.nxez.com/2014/09/30/raspberry-pi-led-status-detail.html?variant=zh-cn LED亮灯状态 LE ...

  9. 【Linux】在虚拟机上安装ubuntu

    虚拟机安装步骤  参考:http://www.cnblogs.com/sxdcgaq8080/p/7466529.html 在安装ubuntu系统之前,当然是下载一个ubuntu的iso镜像在本地啦. ...

  10. Go -- PipleLine

    1.pipeline的产生 从一个现象说起,有一家咖啡吧生意特别好,每天来的客人络绎不绝,客人A来到柜台,客人B紧随其后,客人C排在客人B后面,客人D排在客人C后面,客人E排在客人D后面,一直排到店面 ...