Design Pattern 设计模式1 - Strategy 1
实现 : 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的更多相关文章
- Composite Design Pattern 设计模式组合
设计模式组合,它能够更类组合在一类,形成一个树状结构. #include <set> #include <iostream> #include <string> u ...
- Design Principle vs Design Pattern 设计原则 vs 设计模式
Design Principle vs Design Pattern设计原则 vs 设计模式 来源:https://www.tutorialsteacher.com/articles/differen ...
- 说说设计模式~大话目录(Design Pattern)
回到占占推荐博客索引 设计模式(Design pattern)与其它知识不同,它没有华丽的外表,没有吸引人的工具去实现,它是一种心法,一种内功,如果你希望在软件开发领域有一种新的突破,一个质的飞越,那 ...
- 设计模式(Design Pattern)系列之.NET专题
最近,不是特别忙,重新翻了下设计模式,特地在此记录一下.会不定期更新本系列专题文章. 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结. 使用 ...
- java设计模式大全 Design pattern samples in Java(最经典最全的资料)
java设计模式大全 Design pattern samples in Java(最经典最全的资料) 2015年06月19日 13:10:58 阅读数:11100 Design pattern sa ...
- 简单工厂设计模式(Simple Factory Design Pattern)
[引言]最近在Youtub上面看到一个讲解.net设计模式的视频,其中作者的一个理解让我印象很深刻:所谓的设计模式其实就是运用面向对象编程的思想来解决平时代码中的紧耦合,低扩展的问题.另外一点比较有见 ...
- 巧用代理设计模式(Proxy Design Pattern)改善前端图片加载体验
这篇文章介绍一种使用代理设计模式(Proxy Design Pattern)的方法来改善您的前端应用里图片加载的体验. 假设我们的应用里需要显示一张尺寸很大的图片,位于远端服务器.我们用一些前端框架的 ...
- 设计模式-模板方法设计模式--Template Method design pattern
/** * Abstract implementation of the {@link org.springframework.context.ApplicationContext} * interf ...
- [转]Design Pattern Interview Questions - Part 3
State, Stratergy, Visitor Adapter and fly weight design pattern from interview perspective. (I) Can ...
随机推荐
- IE浏览器部分js代码不生效的问题
[小小坑记录] 问题描述:IE浏览器写好功能代码之后,在调试模式下程序能正常运行.不开启调试模式正常访问时js部分功能代码不生效. 原因:在测试时用了console对象在控制台输出一一些内容,而IE的 ...
- Leetcode 332.重新安排行程
重新安排行程 给定一个机票的字符串二维数组[from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序.所有这些机票都属于一个从JFK(肯尼迪国际机场)出发的先生 ...
- LINQ-进行数据转换
一.将多个输入联接到一个输出序列中 可以使用 LINQ 查询创建包含元素的输出序列,这些元素来自多个输入序列. 以下示例演示如何组合两个内存中数据结构,但相同的原则可应用于组合来自 XML 或 SQL ...
- 算法复习——splay(bzoj3224)
题目: Description 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3. 查询x数的排名(若有多个 ...
- bzoj2286 (sdoi2011)消耗战(虚树)
[Sdoi2011]消耗战 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 4052 Solved: 1463[Submit][Status][Dis ...
- log4j详细配置解析
出自:http://www.blogjava.net/zJun/archive/2006/06/28/55511.html Log4J的配置文件(Configuration File)就是用来设置记录 ...
- C++函数传递指向指针的指针的应用
传递指向指针的引用假设我们想编写一个与前面交换两个整数的 swap 类似的函数,实现两个指针的交换.已知需用 * 定义指针,用 & 定义引用.现在,问题在于如何将这两个操作符结合起来以获得指向 ...
- JFinal2.0极速开发视频教程发布【转】
原文:http://blog.dreamlu.net/blog/79 目前JFinal越来越火爆,而且使用的公司越来越多.鉴于市面上JFinal的学习资源不多,我们开始基于JFinal2.0录制学习视 ...
- 王垠:完全用Linux工作 (2003)
完全用Linux工作,抛弃windows 我已经半年没有使用 Windows 的方式工作了.Linux 高效的完成了我所有的工作. GNU/Linux 不是每个人都想用的.如果你只需要处理一般的事务, ...
- Python 和 Elasticsearch 构建简易搜索
Python 和 Elasticsearch 构建简易搜索 作者:白宁超 2019年5月24日17:22:41 导读:件开发最大的麻烦事之一就是环境配置,操作系统设置,各种库和组件的安装.只有它们都正 ...