设计模式入门,策略模式,c++代码实现
// 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++代码实现的更多相关文章
- Head First设计模式 1 设计模式入门 策略模式 观察者模式
关于基本的OOP特征: OOP的几大特征是抽象 继承 封装 多态. 我们把共同的部分抽象出来作为抽象类的存在,使用继承和接口来实现多态,然后私有的部分封装起来.一定程度上说,这些概念都是简单的设计模式 ...
- 设计模式入门,命令模式,c++代码实现
// test06.cpp : Defines the entry point for the console application.////设计模式第5章 命令模式#include "s ...
- 设计模式入门,单件模式,c++代码实现
// test05.cpp : Defines the entry point for the console application.// #include "stdafx.h" ...
- 设计模式入门,工厂模式,c++代码实现
// test04.cpp : Defines the entry point for the console application.////设计模式第4章 工厂模式#include "s ...
- php设计模式之策略模式实例代码
html <html> <head> <meta charset="UTF-8"> <title>简单计算器</title&g ...
- Python设计模式: 最佳的"策略"模式实践代码
Python设计模式: 最佳的"策略"模式实践代码 今天抽空看了下流畅的python,发现里面介绍了不少python自带的库的使用实例,用起来非常的优雅. 平时用Python来写爬 ...
- 设计模式:策略模式(Strategy)
定 义:它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化, 不会影响到使用算法的客户. 示例:商场收银系统,实现正常收费.满300返100.打8折.......等不同收费 ...
- PHP设计模式之策略模式
前提: 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能.如查 找.排序等,一种常用的方法是硬编码(Hard Cod ...
- 乐在其中设计模式(C#) - 策略模式(Strategy Pattern)
原文:乐在其中设计模式(C#) - 策略模式(Strategy Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 策略模式(Strategy Pattern) 作者:webabc ...
随机推荐
- 【javascript】判断是否微信浏览器的最佳实践
根据判断UA中是否有关键字micromessenger,有的话则是微信内置浏览器 用Chrome的iPhone5模拟测试 //判断是否微信登陆 function isWeiXin() { var ua ...
- 【vim】搜索与替换
1. 搜索 命令 功能 备注 * 向下搜索光标所在处的词 n下一个,N上一个 # 向上搜索光标所在处的词 同上 [+<Ctrl>+i 跳转到光标所在处的变量的声明 使用tag [+< ...
- 注解中用于@target的方法annotation/--ElementType.METHOD,ElementType.TYPE对应方法,类接
@Target: @Target说明了Annotation所修饰的对象范围:Annotation可被用于 packages.types(类.接口.枚举.Annotation类型).类型成员(方法.构造 ...
- 耗时 2 年,用 8.5 万块乐高积木最牛复刻 Apple Park
简评:国外大佬复刻 Apple Park,看了一下细节,确实厉害!只有你想不到,没有乐高拼不起来的,有没有乐高大神挑战一下? 苹果公园以各种各样的方式鼓舞人心,让人感兴趣.从建筑.可持续性和成本,到像 ...
- iOS 之新特性界面
1.什么事新特性界面? 新特性界面就是第一次下载程序出现的界面,他的用途是帮助用户快速了解这款APP,所有说还是很有必要学一下的. 2.如何实现新特性界面? 实现思路:从本质上看,新特性界面就是一个全 ...
- C#-WebForm-AJAX阿贾克斯(二)★★★★★ajax的完整结构★★★★★
ajax完整结构: $.ajax({ url:"",//服务器路径 data:{},//给服务端传递的参数,可以没有,也可以是多个 type:"post", / ...
- JDK7,8,JD9的hashmap,hashtable,concurrenthashmap及他们的区别
1:hashmap简介(如下,数组-链表形式) HashMap的存储结构 图中,紫色部分即代表哈希表,也称为哈希数组(默认数组大小是16,每对key-value键值对其实是存在map的内部类entry ...
- javaweb Servlet接收Android请求,并返回json数据
1.实现功能 (1)接收http请求 (2)获取Android客户端发送的参数对应的内容 (3)hibernate查询数据库 (4)返回json数据 2.java代码 import EntityCla ...
- Python 全栈开发:dict(字典)常用方法操作、dict嵌套
数据类型的划分:可变数据类型和不可变数据类型. 不可变数据类型(可哈希):元祖.bool.int.str 可变数据类型(不可哈希):list.dict,set(集合) dict(字典): dict(字 ...
- cool kickass
I can stay like this alllllllllll daaaaaaaaayyyyyy.