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 ...
随机推荐
- [uiautomator篇][python] wifi接口学习网址
https://wifi.readthedocs.io/en/latest/wifi_command.html#usage
- HDU 1166 敌兵布阵【分块】
Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任 ...
- Redis常见配置redis.conf
redis的配置文件.相信学过SSH或SSM的读者都知道,配置文件的使用在当下开发已十分普遍,希望大家要熟悉习惯这 种开发方式,废话不多说,来开始我们今天的内容吧. 首先得找到 redis 的配置文件 ...
- 【2018.10.1】【JSOI2016】最佳团体(bzoj4753)
一看到“比值”最大(性价比最高)就知道跟分数规划有关系了.(这里讲过分数规划) 然后看到 要选一个候选人 必须选他的前置,画画图就知道是一棵树. 所以这道题是二分比值,每个点的权值就是战斗力-费用*比 ...
- Linux(13):期中架构(5)--- 前端部分:keepalived高可用 & HTTPS & iptables防火墙
keepalived 高可用集群 1. keepalived服务概念说明 # 1.1 keepalived软件的作用? Keepalived软件起初是专为LVS负载均衡软件设计的, 用来管理并监控LV ...
- 连通 OR 不连通(NOJ 1044)
比赛描述 给定一个无向图,一共n个点,请编写一个程序实现两种操作: D x y 从原图中删除连接x,y节点的边. Q x y 询问x,y节点是否连通 输入 第一行两个数n,m(5<=n<= ...
- 【ZOJ4053】Couleur(主席树,set,启发式)
题意: 有n个位置,每个位置上的数字是a[i],现在有强制在线的若干个单点删除操作,每次删除的位置都不同,要求每次删除之后求出最大的连续区间逆序对个数 n<=1e5,1<=a[i]< ...
- php——验证身份证是否合法的函数
function is_idcard( $id ){ $id = strtoupper($id); $regx = "/(^\d{15}$)|(^\d{17}([0-9]|X)$)/&quo ...
- android调用 .net webService
package com.rockcheck.mes; import android.os.AsyncTask; import android.support.v7.app.AppCompatActiv ...
- PAT (Advanced Level) 1088. Rational Arithmetic (20)
简单题. 注意:读入的分数可能不是最简的.输出时也需要转换成最简. #include<cstdio> #include<cstring> #include<cmath&g ...