其实设计模式可以学习很有趣,你并不需要有这么难啃旱地FOG对我来说,当然,这些都是健康的骨骼啃啃。

在本文中,建造者模式设计一个搞笑的一幕。根据这一模型来学习功夫的方法,哈哈。

基类的第一,设计。那么你必须有学习武术基础:

class 功夫
{
public:
virtual void 看招() = 0;
};

有了基础之后。我们就能够学习高级功法了,这里学习降龙十八掌。O(∩_∩)O~。

list<int>容器。相当于记录下来的武功招式了。记住这些招式之后就能够開始学习了。小宝曰:绝世武功这么厚,看也得半年吧。

因为已经失传的缘故。这里仅仅有5招了。呵呵。

class 学习降龙十八掌 : public 功夫
{
list<int> 招式; public:
学习降龙十八掌()
{
} void 学习宝典(list<int> 宝典)
{
招式.clear();
招式 = 宝典;
} void 看招()
{
auto it = 招式.begin();
for ( ; it != 招式.end(); it++)
{
switch (*it)
{
case 1:
亢龙有悔();
break;
case 2:
飞龙在天();
break;
case 3:
见龙在田();
break;
case 4:
潜龙勿用();
break;
case 5:
震惊百里();
break;
default:
已失传();
}
}
} void 亢龙有悔()
{
puts("\n亢龙有悔:\n说着左腿微屈。右臂内弯,右掌划了个圆圈。呼的一声,向外推去,手掌扫到面前一棵松树,喀喇一响。松树应手断折。\n 他左手划个半圆。右手一掌推出,正是生平得意之作“降龙十八掌”中的「亢龙有悔」");
} void 飞龙在天()
{
puts("\n飞龙在天:\n洪七公把“降龙十八掌”中的第二招「飞龙在天」教了郭靖。\n这一招跃起半空,居高下击,威力奇大,郭靖花了三天工夫,方才学会。");
} void 见龙在田()
{
puts("\n见龙在田:\n郭靖见他越逼越近,早有提防,当他右手离黄蓉身前尺许之际,左掌圆劲,右掌直势,使招「见龙在田」,挡在黄蓉身前。\n这一招纯是防御,却是在黄蓉与渔人之间布了一道坚壁。敌来则挡,敌不至则消于无形。 ");
} void 潜龙勿用()
{
puts("\n潜龙勿用:\n郭靖暗叫:“不好! ”全身已感酸麻,危险中右手屈起食中两指。半拳半掌,向她胸口打去。那是「潜龙勿用」的半招。本来左手同一时候向里钩拿,右推左钩。敌人极难闪避,现下左腕被拿,仅仅得使了半招。");
} void 震惊百里()
{
puts("\n震惊百里:\n欧阳锋叫声:“好!”第二推又已迅速异常的赶到,前劲未衰,后劲继至。\n郭靖猛认为劲风罩上身来。心知不妙。一招「震惊百里」。也是双掌向前平推。这是降龙十八掌中威力极大的一招。");
} void 已失传()
{
puts("\n已失传\n");
}
};

有了武功宝典之后。就能够由人进行学习啦,理论上谁都能够学习的,看有缘人是谁吧:

class 学习对象
{
public:
virtual void 学亢龙有悔() = 0;
virtual void 学飞龙在天() = 0;
virtual void 学见龙在田() = 0;
virtual void 学潜龙勿用() = 0;
virtual void 学震惊百里() = 0;
virtual void 学多了() = 0;
virtual 功夫 *学成() = 0;
};

这个有缘人就是郭大侠啦:

class 郭靖 : public 学习对象
{
学习降龙十八掌 *秘籍;
list<int> 招式;
public:
郭靖()
{
秘籍 = new 学习降龙十八掌;
} void 学亢龙有悔()
{
招式.push_back(1);
}
void 学飞龙在天()
{
招式.push_back(2);
}
void 学见龙在田()
{
招式.push_back(3);
}
void 学潜龙勿用()
{
招式.push_back(4);
}
void 学震惊百里()
{
招式.push_back(5);
}
void 学多了()
{
招式.push_back(6);
} 功夫 *学成()
{
秘籍->学习宝典(招式);
return 秘籍;
}
~郭靖()
{
delete 秘籍;
}
};

然后是执行:

void 打功夫()
{
学习对象 *郭大侠 = new 郭靖;
郭大侠->学飞龙在天();
郭大侠->学见龙在田();
郭大侠->学亢龙有悔();
郭大侠->学潜龙勿用();
郭大侠->学震惊百里();
郭大侠->学多了(); 功夫 *降龙掌 = 郭大侠->学成();
降龙掌->看招();
}

最后执行结果:

总结其思想:

已经有了一本武功秘籍了-”学习降龙十八掌“,可是不一定要所有学完的,所以书中记录了各种招式,能够让人选择,并使用容器list<int>记录人的选择。

这个选择是由觉得做出的-郭靖,选择好之后,再终于生成最后的武功招式。

这里的-看招函数就是依照list<int>的内容一招一招打出去的。

呵呵,本程序是在vs2012上执行的,因为是全中文。故此vs6肯定是不能执行的了。

版权声明:笔者靖心脏。景空间地址:http://blog.csdn.net/kenden23/,只有经过作者同意转载。

design pattern Builder 生成器设计模式的更多相关文章

  1. Design Pattern ——Builder

    一.基础知识:先前学习建造者模式的时候,总是以这个UML图作为学习基础资料 然后总是要记住四个角色 产品类:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量.在本类图中 ...

  2. Design Pattern Iterator 迭代器设计模式

    这个设计模式感觉很easy,我们平时敲代码的时候也是常常须要调用iterator的,C++和Java都是. 所以感觉没什么特别的.就是须要模仿C++或者Java的iterator类的功能吧. 这里简单 ...

  3. Design Pattern Memo 备忘录设计模式

    本设计模式就是简单地记录当前状态.然后利用记录的数据恢复. 比方首先我们有一个类.类须要记录当前状态进行相关的工作的: class Memo; class Human { public: string ...

  4. Design Pattern Command 命令设计模式

    这种设计模式是使用不同类的包裹不同的命令,达到什么样的命令执行什么操作. 有可能进一步利用map您最喜欢的对接命令字. 正在运行的类实际上已经包含了操作的所有需求,例如: class SuperMak ...

  5. Design Pattern Bridge 桥设计模式

    桥设计模式事实上就是一个简单的has a relationship.就是一个类拥有还有一个类,并使用还有一个类实现须要的功能. 比方遥控器和电视之间能够使用桥设计模式达到能够使用同一个遥控器控制多台电 ...

  6. Flyweight Design Pattern 共享元设计模式

    就是利用一个类来完毕多种任务.不用每次都创建一个新类. 个人认为这个设计模式在C++里面,好像能够就使用一个函数取代,利用重复调用这个函数完毕任务和重复利用这个类,好像几乎相同. 只是既然是一个设计模 ...

  7. Design Pattern Adaptor 适配器设计模式

    适配器设计模式是为了要使用一个旧的接口,或许这个接口非常难用,或许是和新的更新的接口不兼容,所以须要设计一个适配器类,然后就能够让新旧的接口都统一. 就是这种一个图: watermark/2/text ...

  8. [Design Pattern With Go]设计模式-工厂模式

    这次介绍的设计模式是工厂模式,这是一个比较常见的创建型模式.一般情况下,工厂模式分为三种:简单工厂.工厂方法和抽象工厂,下面慢慢举例介绍下. 简单工厂 考虑一个加密程序的应用场景,一个加密程序可能提供 ...

  9. [Design Pattern With Go]设计模式-单例模式

    定义 一个类只允许创建一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例模式.当某些数据只需要在系统中保留一份的时候,可以选择使用单例模式. 饿汉式 饿汉式的实现方式比较简单.在类加 ...

随机推荐

  1. [置顶] ※数据结构※→☆线性表结构(list)☆============双向链表结构(list double)(三)

    双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱.所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点. ~~~~~~~~~~~~ ...

  2. centos6搭建本地openstack软件源

    1.把相关软件包所有下载到本地机器 wget -np -nH –cut-dirs=1 -r -c -L –exclude-directories=repodata –accept=rpm,gz,xml ...

  3. Lua 与C 交换 第一篇

    编译 windows上编译lua源代码 cl /MD /O2 /W3 /c /DLUA_BUILD_AS_DLL *.c del *.o ren lua.obj lua.o ren luac.obj ...

  4. Revit 2015 公布!

    Revit 2015 公布了, 如今能够下载.大家能够搜索下中文版的下载. 之前就知道2015 的模型操作速度再次提高, 2015安装后的马上载入跑了一个模型.果然,2015 打开自带的高级模型,不管 ...

  5. APUE学习--网络编程(3)

    本篇文章介绍TCP通信. 上文提到传输层的两个协议TCP和UDP,UDP是无连接的已经介绍过,TCP是面向连接的,阐述建立连接和断开连接前先来看下TCP报文头的结构. 报文头在linux的定义在/us ...

  6. 批处理程序:自动上传FTP,再登陆linux服务器执行更新

    ----转载请注明出处:博客园-邦邦酱好 最近在学批处理程序,一直没找到能够结合工作来使用它的地方,前几天测试服务端的时候突然想到可以这样做: 写一个批处理程序,自动通过FTP上传软件包到指定的地方, ...

  7. 建立qemu桥接的网络连接

    转载请注明出处谢谢:http://www.openext.org/2014/07/qemu-kvm-bridge-00     安装桥接工具:sudo apt-get install bridge-u ...

  8. POJ 1475 Pushing Boxes 搜索- 两重BFS

    题目地址: http://poj.org/problem?id=1475 两重BFS就行了,第一重是搜索箱子,第二重搜索人能不能到达推箱子的地方. AC代码: #include <iostrea ...

  9. C#生成PDF页脚第几页共几页

    C#生成PDF页脚第几页共几页 分类: .net 2012-06-06 21:04 2842人阅读 评论(3) 收藏 举报 c#stringfontsfileheaderwindows 我在网上找了好 ...

  10. Ubuntu常用软件推荐,图文详细说明及下载

    抛开Windows,其实在任何一款Linux发行版本中,我们都有超级大量的软件来安装,使用.这次的教程,我就以Ubuntu为例,来给大家推荐一些我认为不错的软件 声明: 1.本文提到的全部软件,都在文 ...