- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
07--第七章原型模式详解
第七章 原型模式(Prototype pattern) 7.1 原型模式简介 使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象。 ——《设计模式》GoF 通过给出一个原型对象来指明所要创建的对象类型,然后用复制这个原型对象的办法创建出更多的同类型对象。 动机:在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化(如更换类型),但是它们却拥有比较稳定一致的接口。如何应对这种变化?如何向“客户程序(使用这些对象的程序)”隔离出”这些易变对象”,从而使得“依赖这些易变对象的客户程序”不随着需求改变而改变? 7.2 原型模式的结构 7.2 原型模式的结构 客户(Client)角色:客户类提出创建对象的请求。 抽象原型(Prototype)角色:这是一个抽象角色,通常由一个C#接口或抽象类实现。此角色给出所有的具体原型类所需的接口。在C#中,抽象原型角色通常实现了ICloneable接口(其实,这里自定义一个方法如:DeepCopy更好)。 具体原型(Concrete Prototype)角色:被复制的对象。此角色需要实现抽象原型角色所要求的接口。 7.3 原型模式示例 1、GameDemoInit 游戏场景中经常需要根据一个已知的角色创建出一群类似的角色,而角色本身的类型需要经常变化。 Actor(小兵)分为2种:NormalActor(普通小兵)和FlyActor(有飞行技能的小兵),小兵往往需要成群出现。 变化点在于游戏中经常需要构造一群小兵,而且小兵的类型经常变化。。。 7.3 原型模式示例 2、GameDemoDotNet 在.Net中实现原型模式 MemberwiseClone()可以实现所谓的“浅表复制” 3、GameDemoDeepCopy 如果被克隆的对象中含有引用型的成员,则“浅表复制”会出现问题,必须进行“深度复制”。 4、GameDemoSerializCopy 利用序列化和反序列化实现深度复制,可以很方便地实现大量成员的深度复制,不必将每个成员类分别实现深度克隆(相关的所有类必须都标识[Serializable])。 单纯地复制数据,不能实现个别数据的设置,如:ID 7.4 带Prototype Manager的原型模式 7.4 带Prototype Manager的原型模式 客户(Client)角色:客户端类向原型管理器提出创建对象的请求。 抽象原型(Prototype)角色:这是一个抽象角色,通常由一个C#接口或抽象类实现。此角色给出所有的具体原型类所需的接口。在C#中,抽象原型角色通常实现了ICloneable接口。 具体原型(Concrete Prototype)角色:被复制的对象。此角色需要实现抽象的原型角色所要求的接口。 原型管理器(Prototype Manager)角色:创建具体原型类的对象到一个线性表中,并记录每一个被创建的对象。 示例:颜色管理--ColorPrototype 7.5 原型模式总结 Prototype模式的优点: Prototype模式允许动态增加或减少产品类。由于创建产品类实例的方法是产品类内部具有的,因此增加新产品对整个结构没有影响。 Portotype模式具有给一个应用软件动态加载新功能(新对象)的能力。由于Prototype的独立性较高,可以很容易动态加载新功能而不影响老系统。 Prototype模式提供了简化的创建结构。工厂方法模式常常需要有一个与产品类等级结构相同的等级结构,而Prototype模式就不需要这样;产品类不需要非得有任何事先确定的等级结构,因为Prototype模式适用于任何的等级结构。 7.5 原型模式总结 Prototype模式的缺点: 每一个类必须配备一个克隆方法。而且这个克隆方法需要对类的功能进行通盘考虑,这对全新的类来说不是很难,但对已有的类进行改造时,不一定是件容易的事。 7.6 创建型模式总结 Singleton模式解决的是实例对象个数的问题。除了Singleton之外,其他创建型模式解决的都是new所带来的耦合关系。 Factory Method,Abstract Factory,Builder都需要一个额外的类来负责实例化“易变对象”,而Prototype则是通过原型(一个特殊的工厂类)来克隆“易变对象”。(其实原型就是一个特殊的工厂类,它只是把工厂和实体对象耦合在一起了)如果遇到“易变类”,起初的设计通常从Factory Method开始,当遇到更多的复杂变化时,再考虑重构为其他三种模式(Abstract Factory,Builder,Prototype)。 Prototype的使用情况一般是在类比较容易克隆的条件之上,如果是每
您可能关注的文档
- 06遗传的分子基础详解.doc
- 06静电场中的导体和介质详解.ppt
- 06鱼类的消化系统详解.ppt
- 07-08学年高二(上)生物期中考试(理科)详解.doc
- 07-10年山东生物高考试卷去答案详解.doc
- 07-硕士研究生课-现代分子生物学-蛋白质研究进展-1-李恩民详解.ppt
- 07-生命活动的调节详解.doc
- 07-1第七章1节微生物的生长详解.ppt
- 07.05抗生素详解.ppt
- 07.第七章糖代谢详解.ppt
- 固态速溶茶:“冻干黑科技”,固态速溶茶品牌通过创新满足需求-头豹词条报告系列.pdf
- 电商行业2024年三季度财报总结:竞争格局边际趋稳,重估龙头.pdf
- 2024年基本级执法资格考试公共科目试题题库.doc
- 2024年基础知识试题.doc
- 2024年基础护理学重点复习笔记.doc
- 易错点03 地图的阅读-备战2023年中考地理考试易错题(原卷版).docx
- 易错点06 状语从句(让步、结果和目的)(学生版).docx
- 易错点07 被动语态(学生版).docx
- 易错点07 世界地理之人文篇-备战2023年中考地理考试易错题(原卷版).docx
- 考点06 介词和介词短语-备战2023年中考英语一轮复习考点帮(全国通用)(解析版).docx
文档评论(0)