• 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中设计模式中,创建型模式均已介绍完,希望大家能快速理解及应用。

     

  • 相关阅读:
    【算法学习】二分专场-别说你不会二分啦
    子矩阵的前缀和(二维数组)
    【LeetCode 6182 反转二叉树的奇数层】
    【code-server】Code-Server 安装部署
    Bert如何融入知识一-百度和清华ERINE
    虚拟机VirtualBox和Vagrant安装
    【Python】爬虫-基础入门
    分享im即时通讯开发之WebSocket:概念、原理、易错常识
    【QT】TCP简易聊天框
    【报错】springboot3启动报错
  • 原文地址:https://blog.csdn.net/m0_69234258/article/details/126032811