设计模式在游戏中的应用--工厂方法(五)
2015-07-27 22:30
351 查看
概述:工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。
其实我们都知道工厂方法和简单工厂的区别就是工厂方法把简单工厂的方法进行了抽象,提取出了一个公共的工厂基类。遵循对修改关闭对扩展开放的态度,当需要增加新的产品的时候,只需要增加新的工厂和对应的产品就可以了。
上面是游戏中公会的事件的一个工厂方法,使用工厂方法不使用简单工厂的原因:
一、在对应的地方添加对应的事件的时候,我们知道对应什么事件,不需要简单工厂再来判断。
二、当我们需要添加新的公会事件的时候,只需要添加对应的工厂和事件。
其实我们都知道工厂方法和简单工厂的区别就是工厂方法把简单工厂的方法进行了抽象,提取出了一个公共的工厂基类。遵循对修改关闭对扩展开放的态度,当需要增加新的产品的时候,只需要增加新的工厂和对应的产品就可以了。
#include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { return 0; } class IGuildEventMsg { public: IGuildEventMsg(){}; virtual ~IGuildEventMsg(){}; virtual void PrintMsg(){}; }; class GuildCreateGuildMsg:public IGuildEventMsg { void PrintMsg() { cout<<"create guild!"<<endl; }; }; class GuildAddMemGuildMsg:public IGuildEventMsg { void PrintMsg() { cout<<"add new member!"<<endl; }; }; class GuildQuitGuildMsg:public IGuildEventMsg { void PrintMsg() { cout<<"quit guild!"<<endl; }; }; class IGuildEventFactory { public: IGuildEventFactory(){}; virtual ~IGuildEventFactory(){}; virtual void PrintMsg(){}; virtual IGuildEventMsg* CreateFactory(){ return NULL; }; }; class GuildCreateEventFactory:public IGuildEventFactory { public: IGuildEventMsg* CreateFactory() { return new GuildCreateGuildMsg(); } }; class GuildQuitEventFactory:public IGuildEventFactory { public: IGuildEventMsg* CreateFactory() { return new GuildQuitGuildMsg(); } }; void main() { auto_ptr<IGuildEventFactory> factory(new GuildQuitEventFactory()); IGuildEventMsg* guildQuitEvent = factory->CreateFactory(); guildQuitEvent->PrintMsg(); factory.reset(new GuildCreateEventFactory()); IGuildEventMsg* guildCreateEvent = factory->CreateFactory(); guildCreateEvent->PrintMsg(); }
上面是游戏中公会的事件的一个工厂方法,使用工厂方法不使用简单工厂的原因:
一、在对应的地方添加对应的事件的时候,我们知道对应什么事件,不需要简单工厂再来判断。
二、当我们需要添加新的公会事件的时候,只需要添加对应的工厂和事件。
相关文章推荐
- scala界面GUI编程实战初步了解
- web优化 js性能高级篇
- 小白学开发(iOS)OC_ 点语法(2015-07-27)
- Quartz2D-03.利用Quartz2D画复杂事物
- O ______Block
- poj3613Cow Relays (经过n条边的最短路)
- Hibernate 缓存机制
- 046.@try 处理异常
- 047.@try…@catch... 捕捉异常
- zoj1071 Follow My Logic(没看题,不过据说很恶心,待ac)
- Java IO学习【13】利用字节流复制文件的4种方法详解
- pre标签
- 引用类型
- Skype for Business Server 2015系列(三)部署前端服务器-2
- 微机原理 之“极品飞车”课程设计
- ZOJ 3209 Treasure Map
- 数据库前缀索引
- 错误“Unexpected namespace prefix "xmlns" found for tag LinearLayout”的解决方法
- JAVA之父子类的构造函数、静态代码块等执行顺序
- scala中的控制语句