从王者荣耀看设计模式(原型模式)

一.简介
王者荣耀包含有很多的玩法,其中有一种游戏模式只在周六和周日开放,那就是——克隆模式。与常规的游戏双方阵营只允许出现单一英雄不同,在克隆模式中,双方各选择一个英雄进行克隆,换句话说,一个阵营的五个人操作的五个相同的英雄
二.模式动机
在软件系统中,有些对象的创建过程比较复杂,而且有时候需要频繁创建,原型模式通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象,这就是原型模式的意图所在。在本实例中,克隆模式中有很多的相同的英雄,如果每一个都实例出来浪费资源,可以通过原型模式克隆出多个相同英雄。
三.原型模式
原型模式(Prototype Pattern):原型模式是一种对象创建型模式,用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。原型模式允许一个对象在创建另外一个定制的对象,无须知道任何创建的细节。原型模式的基本工作原理是通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象复制原型来实现创建过程。
建造者模式应用场景
在以下情况下可以使用原型模式:
⑴. 创建新对象成本较大(如初始化需要占用较大的时间,占用太多的CPU资源或网络资源),新的对象可以通过原型模式对已有对象进行复制来获得,如果是相似对象,则可以对其属性进行修改.
⑵. 如果系统要保存对象的状态,而对象的状态变化很小,或者对象本身占内存不大的时候,也可以使用原型模式配合备忘录模式来应用。相反,如果对象的状态变化很大,或者对象占用的内存很大,那么采用状态模式会比原型模式更好
⑶. 需要避免使用分层次的工厂类来创建分层次的对象,并且类的实例对象只有一个或很少的几个组合状态,通过复制原型对象得到新实例可能比使用构造函数创建一个新实例更加方便
原型模式涉及的设计原则有:
★ 为交互对象之间的松耦合设计而努力
★ 软件实体应该是可以扩展的,但是不可修改的
原型模式通用类图:

原型模式涉及的角色有:
● Prototype(抽象原型类)
抽象原型类是定义具有克隆自己的方法的接口,是所有具体原型类的公共父类,可以是抽象类也可以是接口
● ConcretePrototype(具体原型类)
具体原型类实现具体的克隆方法,在克隆方法中返回自己的一个克隆对象。
● Client(客户类)
让一个原型克隆自身,从而创建一个新的对象,在客户类中只需要直接实例化或通过工厂方法等方式创建一个对象,再通过调用该对象的克隆方法复制得到多个相同的对象。
原型模式的优点:
⑴. 当创建新的对象实例较为复杂时,使用原型模式可以简化对象的创建过程,通过一个已有实例可以提高新实例的创建效率
⑵. 可以动态增加或减少产品类。
⑶. 原型模式提供了简化的创建结构。工厂方法模式常常需要一个与产品类等级结构相同的等级结构,而原型模式就不需要这样,原型模式中产品的复制是通过封装在原型类中的clone()方法实现的,无须专门的工厂类来创建产品
⑷. 可以采用深克隆的方式保存对象的状态。使用原型模式将对象复制一份并将其状态保存起来,以便在需要的时候使用
原型模式的缺点:
⑴. 需要为每一个类配备一个克隆方法,而且这个克隆方法需要对类的功能进行通盘考虑,这对全新的类来说并不是很难,但对已有的类进行改造时,不一定是一件容易的事情,必须修改其源代码,违背了"开闭原则"
⑵. 在实现深克隆时需要编写较为复杂的代码
深克隆与浅克隆
<

本文通过王者荣耀的克隆模式探讨了原型模式在软件设计中的应用。原型模式是一种创建型设计模式,用于高效地复制已有对象,减少了对象创建的成本。文章详细阐述了原型模式的动机、优缺点、深浅克隆的区别,并通过实例展示了如何在Java中实现原型模式,包括创建原型类、访问类以及成员对象类。此外,还介绍了带原型管理器的原型模式,用于管理多个英雄皮肤的创建。最后,文章提供了代码示例,演示了如何利用原型模式创建和管理英雄角色的皮肤效果。
最低0.47元/天 解锁文章
895

被折叠的 条评论
为什么被折叠?



