设计模式连更(7)-原型模式 原型模式

原型模式

概述

原型模式是一种创建型设计模式,使你能够复制已有的对象,而又无需使代码依赖他们所属的类

prototype.png

问题

如果你有一个对象,并且你希望生成与其完全相同的一个复制品,你该如何实现呢?

你可以新建一个相同类的对象,然后遍历原始对象的所有成员变量,并将成员变量复制到新对象中

但是有些对象可能拥有私有对象,它们在对象本身以外是不可见的

解决方案

  • 原型模式将克隆过程委派给被克隆的实际对象。模式为所有支持克隆的对象声明了一个通用接口,该接口让你能够克隆对象,同时又无需将代码和对象所属类耦合
  • 所有的类对克隆方法的实现都非常相似。该方法会创建一个当前类的对象,然后将原始对象所有的成员变量值复制到新建的类中,甚至可以复制私有成员变量

原型模式适合应用场景

  1. 如果你需要复制一些对象,同时又希望代码独立于这些对象所属的具体类,可以使用原型模式

这一点考量通常出现在代码需要处理第三方代码通过接口传递过来的对象时。即使不考虑代码耦合的情况,你的代码也不能依赖这些对象所属的具体类,因为你不知道他们的具体信息

原型模式为客户端代码提供一个通用接口,客户端代码可通过这一接口与所有实现了克隆的对象进行交互,它也使得客户端代码与其所克隆的对象具体类独立开来
2. 如果子类的区别仅在于其对象的初始化方式,那么你可以使用该模式来减少子类的数量。别人创建这些子类的目的可能是为了创建特定类型的对象

在原型模式中,你可以使用一系列预生成的,各种类型的对象作为原型

实现方式

  1. 创建原型接口,并在其中声明克隆方法
  2. 原型类必须另行定义一个以该类对象为参数的构造函数,构造函数必须复制参数对象中的所有成员变量值到新建实体中
  3. 克隆方法通常只有一行代码:使用new运算符调用原型版本的构造函数
  4. 你还可以创建一个中心化原型注册表,用于存储常用原型

原型模式的优缺点

优点

  1. 可以克隆对象,而无需与它们所属的具体类相耦合
  2. 可以克隆预生成原型,避免反复运行初始化代码
  3. 可以更方便地生成复杂对象
  4. 可以用继承以外的方式来处理复杂对象的不同配置

缺点

  1. 克隆包含循环引用的复杂对象可能会非常麻烦

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%