专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 设计模式

什么时候用Prototype模式?解决办法

发布时间:2011-06-19 13:24:09 文章来源:www.iduyao.cn 采编人员:星星草
什么时候用Prototype模式?
当然是为了clone一个对象而存在的,但我看过阎宏的那本书,到了也没讲明白啥需要这么用。btw,阎宏那本书写得真差,例子举得了很逊。

------解决方案--------------------
http://www.cnblogs.com/hjqxaly/archive/2010/09/09/1822460.html
------解决方案--------------------
这里有个例子,你可以参考: http://www.codeproject.com/Articles/185348/Prototype-Design-Pattern

顺便简单的说一下:
Prototype通常用来解决一个问题:对象的创建比较耗费资源。比如,对象创建的时候需要访问数据库、需要读取外部文件、需要使用网络,这些都是比较耗费时间和内存的。如果可以用clone来解决,就方便多了。

举一个比较直观的例子:星际争霸的人物的初始化,就说机枪兵吧,游戏在初始化的时候,要从硬盘读取很多资料,比如机枪兵的UI资源(图片什么的),机枪兵的AI,等其他的参数,由于涉及到了磁盘IO操作,当然会很慢。

如果玩家在游戏中造了100个机枪兵,难不成有100次磁盘读取动作?当然不能这么做,我们只要读取一个,然后把它放入一个Prototype Manager里面,以后只要从这里取一个’模板‘,然后clone一下就可以了,每次新的机枪兵只有个别参数不一样,比如位置等,由于clone是基于内存的操作,速度是非常的快。

当然Prototype还可以解决其他的对象创建的问题,比如:client不了解对象的创建过程,或者client只有对象的多态的指针,根本不知道这个指针指的是哪个具体的子类。对于前者,通常对象的创建是封装在其他lib/class中,client端无法直接创建对象。对于后者,看下面的例子:

C/C++ code

    Image* ba[] = {new Bitmap("abc"), new OtherPicFormat("cde", 0)};
    vector<Image*> vb;
    copy(ba, ba + sizeof(ba) / sizeof(Image*), back_inserter(vb));

    Image* pb = NULL;
    for (vector<Image*>::iterator it = vb.begin(); it != vb.end(); ++it)
    {
        pb = (*it)->clone(); // clone will create a new object
        pb->reform();
        delete pb;
        delete *it;
    }

------解决方案--------------------
有一个类,类中有许多成员变量,这些成员变量设置成不同的值的时候对象会有不同的行为;
这些成员变量的值存在多种组合,但是,最常用的有几种;
为了不需要在每次创建对象的时候都set,set,set,set,...,为这些常见的设置组合各生成一个Prototype对象,需要创建一个某种配置的对象时,就从对应的Prototype对象Copy一个就好了。

------解决方案--------------------
举出我实际开发中一个例子:
GUI中,不同的界面控件需要一个Style来指定样式(字体,字体颜色,前景,背景颜色,位图字体等等),很多时候,你只需要在系统默认的或者已有的Style基础上修改一个,比如字体,那么如果从头来初始化一个Style是没有必要的.这时候,prototype就有了用武之地,那就是Style类支持clone,这样只需要在已有Style基础上clone一个,再修改需要需求属性就可以了.简单快速.理解没?
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

  • 关于后台服务器架构有关问题

    关于后台服务器架构问题 最近小弟在优化后台服务器的工作,因为以前的服务器是采用单进程,单线程,并没有涉及到多台服务器的交互问题...

  • 请问个模式的应用

    请教个模式的应用 要做个公司的权限管理,有三个角色 公司管理员,具有权限M1(a),M1(a,b) 部门经理,具有权限M1(a,b),M2() 部门管理...

  • 继承的优缺点解决方法

    继承的优缺点 请问大家如何理解继承,如何使用好继承? ------解决方案-------------------- 关于这个问题,我的确做了一些思考,推荐...

  • 急设计程序删除文件夹中的已损坏pdf文件解决办法

    急!急!急!设计程序删除文件夹中的已损坏pdf文件 文件夹中总共的pdf文件数量有三十几万,怎么才能删除这些pdf文件中已损坏的pdf文件呢? ...

  • 关于Singleton模式继承的有关问题

    关于Singleton模式继承的问题? 定义一个Singleton类,一般都是要被其他实际的类继承,使这个实际的类具有Singleton功能。 现在看到二...

  • 怎么分析需求以决定用什么设计模式

    如何分析需求以决定用什么设计模式? 最近在看设计模式解析,基本上是陷到里面无法自拔了,我的问题是如何分析需求以决定用什么设计模...

  • 设计模式的应用解决方案

    设计模式的应用 我不知道什么时候该用什么样的设计模式 有号得例子或者教学视频吗 ------解决方案-------------------- 这个...

  • visio2002创建UML类图解决思路

    visio2002创建UML类图 使用visio2002画UML类图,文件-新建-选择绘图类型-UML模型图,就会报下面的错误 Runtime Error Program c:\.....

  • 蜂窝模式?该怎么解决

    蜂窝模式? 啥意思啊 ------解决方案-------------------- 是设计模式中的一个 161592169@qq.com 你给我发歌邮件 我回...

  • [HoWo03]是什么书,在google和百度上都找不到,该怎么解决

    [HoWo03]是什么书,在google和百度上都找不到 [HoWo03]是什么书,在google和百度上都找不到 ------解决方案-------------------- H...

热门推荐: