23种设计模式(六)原型模式 (阁瑞钛伦特软件-九耶实训)

常说的设计模式是23种设计模式,分为3大类:

  • 创建型模式5种:工厂方法、抽象工厂、单例、建造者、原型
  • 结构型模式7种:适配器、代理、桥接、装饰者、外观、享元、组合
  • 行为型模式11种:模板方法、解释器、策略、观察者、迭代器、职责链、命令、备忘录、状态、访问者、中介者。

上次咱们说了“建造者模式”。今天来说“原型模式”。

“原型模式”是指已有一个类(原型类),将此类赋予可clone(克隆)的功能方法。

“class Anything”是将要克隆的一个类,必须实现Cloneable接口以支持clone功能,还要实现Serializable接口以支持序列化功能。(至于什么是序列化请参考IO技能中的“序列化与反序列化”的知识点取查阅。)

“class AnyOne”此类是“class Anything”的一个属性,也就是它的组成部分。

 “class Anything”重写了clone方法,在实例化对象后,调用clone方法,方法返回结果是克隆后的对象将与原型对象不是同一对象。但是,它的组成部分“class AnyOne”的对象仍然和原型对象中的属性是同一对象,所以这样重写的clone方法叫“浅克隆”,仅仅是调用了父类的clone方法。

如果想要把“class Anything”实例化的对象及内部组成部分“class AnyOne”的对象完全克隆,就要用深克隆的方式解决。

 

“深克隆”指的是,将类中所有涉及的对象结构都克隆。

在代码中可以看出,重写clone方法时,利用了对象序列化的转换而达到的克隆效果,实际此代码并没将对象状态写入永久文件,而是将代码在内存中以Byte的类型进行了一次转换(写入及读取)。

 实际测试调用效果便可知道,浅克隆及深克隆的特点。

 下面来实现一个小的示例需求:

在四大名著《西游记》中,孙悟空是上入天下入地,可九天揽月,可下海捉鳖的狠人物。其中一大技能“身外化身”,再加手中的“金箍棒”谁人敢热。“单挑有神器,群殴叫兄弟”。

 

 

分身术相当的真实,即使再真实,也是分身,不是原型。因而这一技能,我们便可以用“原型模式”来表示出来。

先建立一个猴子类(Monkey),当然要由分身的技能(clone)。

当我们用浅克隆的时候,分身成功体现出来了,但是,猴子用的金箍棒是始终没有克隆。  

 

这样的结果将会是,分身出多个个猴子都在使用一个金箍棒(GoldRingeStaff)。

 所以要真正能够达到“猴手一个金箍棒”就需要使用深克隆的方式来解决。

 “打群架”的孙悟空,“猴手一根金箍棒”

 在实际应用中,每当克隆出猴子一个分身,连带金箍棒也一并克隆了。

“原型模式”是利用clone(克隆)的形式复制出对象,属于创建对象的一种方法。

此篇结束后,加上前面所说的“工厂方法、抽象工厂、单例、建造者”,在23中设计模式中,创建型模式均已介绍完,希望大家能快速理解及应用。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值