首页 > 其他分享 >设计模式-原型模式(Prototype)

设计模式-原型模式(Prototype)

时间:2024-07-24 11:41:37浏览次数:9  
标签:设计模式 克隆 对象 模式 原型 拷贝 Prototype 构造函数

设计模式-原型模式(Prototype)

   概要

   记忆关键词:原型实例、拷贝

   定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。  

   分析:原型模式就是从一个样板对象中复制出一个内部属性一致的对象。它是在内存中拷贝二进制流,比new一个对象的性能好很多。

   原型模式结构图如下: 

   

 

## 1.涉及知识点
- 深拷贝和浅拷贝:深拷贝和浅拷贝是只针对引用数据类型的
### 1.1 浅拷贝
- 浅拷贝是在按位(bit)拷贝对象,这个对象有着原始对象属性值的一份精确拷贝

- 如果有嵌套对象的时候,使用浅拷贝会带来数据安全方面的隐患,这就到了需要深拷贝的时候

### 1.2 深拷贝
- 对于有多层对象的,每个对象都需要实现Cloneable并重写clone()方法,才可以实现了对象的串行层层拷贝。
说明:彻底的深拷贝几乎是不可能实现的,那样不但可能存在引用关系非常复杂的情况,也可能存在引用链的某一级上引用了一个没有实现Cloneable接口的第三方对象的情况。

## 2.核心用途

- 解决构建复杂对象的资源消耗问题,提升创建对象的效率。(比如在循环体内产生大量对象的时候)

- 保护性拷贝,防止外部对只读对象进行修改。

## 3.分析
- 原型模式就是从一个样板对象中复制出一个内部属性一致的对象
- 原型模式是在内存中拷贝二进制流,比new一个对象的性能好很多
- 绝大多数设计模式都是牺牲性能提升开发效率的,原型模式则是为数不多的牺牲开发效率提升性能的设计模式

## 4.注意

- 原型模式中的拷贝不会执行构造函数,这是因为原型模式是通过克隆来创建新对象的,而不是通过构造函数。当我们使用原型模式时,需要注意一些情况:

- 1)成员变量的克隆: 如果对象中包含引用类型的成员变量,需要确保这些引用类型也能正确地进行克隆。如果不进行深拷贝,那么原型模式的克隆对象和原对象中的引用类型成员将指向相同的对象,这可能导致意外的修改。

- 2)克隆方法的实现: 类需要实现 Cloneable 接口,并重写 clone 方法。在 clone 方法中,要确保对引用类型进行适当的克隆,以防止浅拷贝问题。

- 3)构造函数的注意事项:由于克隆不会执行构造函数,因此如果在构造函数中进行了一些重要的初始化工作,我们需要确保这些初始化工作在克隆后得到正确的结果。
有时候,我们可能需要在克隆方法中手动执行必要的初始化步骤。

## 5.应用场景
- Java的Object类中
在Java语言中,Object类实现了Cloneable接口,一个对象可以通过调用Clone()方法生成对象,这就是原型模式的典型应用

 

标签:设计模式,克隆,对象,模式,原型,拷贝,Prototype,构造函数
From: https://www.cnblogs.com/hld123/p/18320522

相关文章

  • Java设计模式-单例模式
    Java常用设计模式-单例模式JavaDesignPatterns:创建型模式:工厂方法、抽象方法、建造者、原型、单例结构型模式有:适配器、桥接、组合、装饰器、外观、享元、代理行为型模式有:责任链、命令、解释器、迭代器、中介、备忘录、观察者、状态、策略、模板方法、访问者常用设计模式:......
  • 跟着ChatGPT学习设计模式 - 工厂模式
    1.前言在工作过程中,越发觉得设计模式的重要性。经常会有人说工作5年的人,大学生随便培训1-2月也能做同样的工作,没错,大学生的确可以做。但其写的代码,可维护性、可扩展性、添加新功能时方便还是简单。甚至是软实力的表现,如何沟通、如何推进项目进展、如何做项目排期,其实都是应届生......
  • 设计模式-职责链模式(Chain of Responsibility)
    设计模式-策略模式(ChainofResponsibility)  概要   记忆关键词:传递请求,职责链接  定义:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链发送请求,直到有一个对象处理它为止。  分析:当客户提交一个请求,请......
  • Java常用设计模式-单例模式
    Java常用设计模式-单例模式JavaDesignPatterns:创建型模式:工厂方法、抽象方法、建造者、原型、单例结构型模式有:适配器、桥接、组合、装饰器、外观、享元、代理行为型模式有:责任链、命令、解释器、迭代器、中介、备忘录、观察者、状态、策略、模板方法、访问者常用设计模式:......
  • 创建型模式-单例设计模式
    一、单例设计模式单例模式(SingletonPattern)是Java中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可......
  • 【设计模式】建造者模式
    设计模式的分类:        创建型模式:这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用new运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。        工厂模式、抽象工厂模式、单例模式、建造者模式......
  • 设计模式-状态模式(State pat)
    设计模式-策略模式(StatePattern)  概要   记忆关键词:状态变成类  定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。  状态模式结构图如下:    一、能解决什么问题?  它主要用来解决对象在多种状态转换时,需要对外输出不同......
  • 【Java常用设计模式】通俗易懂的玩转单例、建造者、工厂、策略模式(保姆篇)
    文章目录单例模式建造者模式工厂模式策略模式本篇小结更多相关内容可查看在一个狂风骤雨的下午,有人突然问了我一句,单例模式是什么,我愣了,相信看完这篇就不会愣了,本文以通俗易懂的方式写的,可能有不严谨的地方......
  • 生产者消费者设计模式
    生产者消费者设计模式学习一、什么是生产者消费者设计模式Java中的生产者-消费者设计模式是一种用于多线程编程的经典设计模式,它用于解决多个线程之间共享资源时的同步和通信问题。这个模式主要用在有数据生产者(Producer)和数据消费者(Consumer)的场景中,生产者负责产生数据,而消费者......
  • 职责链、命令和观察者设计模式的区别
    职责链、命令和观察者是三种不同的设计模式,它们各自解决不同类型的问题。下面分别介绍这三种设计模式的特点和区别:1.职责链模式(ChainofResponsibility)定义:职责链模式是一种行为设计模式,它通过将请求的处理者组织成一个链,使得请求可以沿这条链传递,直到有一个处理者处理......