• [Design] Protetype Pattern


    创建模式是对类的实例化过程的抽象化,分为类的创建模式和对象的创建模式。
    类的创建模式
      使用继承关系把类的创建过程延迟到子类,从而封装了客户端将得到哪些具体类的信息,并且隐藏了这些类的实例是如何创建和组合在一起的。
    对象的创建模式
          把对象的创建过程动态的委派给另一个对象,从来动态的决定客户端将得到哪些具体类的实例,以及这些类是实例是如何创建和组合在一起的。
    --------------------------------------------------------
    原始模型模式
       原始模型模式属于对象的创建模式。通过给出一个原型对象来指明所要创建对象的类型,然后通过复制原型对象的方法来创建出更多的同类型的对象。
    适用于产品结构可能会有经常性变化的系统。
    优点
       1. 允许动态的增加或减少产品类。由于创建产品实例的方法是产品类内部具有的,因此,增加新产品对整个结构没有影响。
       2. 产品类不需要非得有任何事先确定的等级结构,因为原始模型模式适用于任何的等级结构。
    缺点
         每一个类都必须配备一个克隆方法。配备克隆方法需要对类的功能进行通盘考虑,对新类问题不大。但对于已经有的类不太容易,特别是不支持串行化或引用含有循环结构的时候。

    原始模型模式有两种表现形式:简单形式和登记形式。
    简单形式的原始模型模式

    • 1、客户角色

        客户类提出创建对象的请求。

    • 2、抽象原型角色

        这是一个抽象角色,一般有接口或抽象类实现。此角色给出所有的具体原型类所需的接口。

    • 3、具体原型角色

        被复制的对象,此角色需要实现抽象的原型角色所要求的接口。

     登记形式的原始模型模式

    • 1、 客户端角色

        提出创建对象的请求。

    • 2、抽象原型角色

        给出所有的具体原型类所需的接口。一般由接口或抽象类实现。

    • 3、具体原型角色

        被复制的对象,需要实现抽象的原型角色所需要的接口。

    • 4、原型管理器角色

        创建具体原型类的对象,并记录每一个被创建的对象。

  • 相关阅读:
    CF1042E Vasya and Magic Matrix
    Luogu 4868 Preprefix sum
    CF1042F Leaf Sets
    CF1041F Ray in the tube
    【Luogu】P1410子序列(DP)
    【Luogu】P1383高级打字机
    【Luogu】P1681最大正方形2(异或运算,DP)
    【Luogu】P1122最大子树和(DFS,树上DP)
    【Luogu】P2258子矩阵(状态压缩,DP)
    【Luogu】P2158仪仗队(欧拉函数)
  • 原文地址:https://www.cnblogs.com/abeen/p/1442209.html
Copyright © 2020-2023  润新知