首页 > 其他分享 >【设计模式(四)】创建型模式--原型模式

【设计模式(四)】创建型模式--原型模式

时间:2024-07-05 14:22:04浏览次数:20  
标签:克隆 Realizetype -- 创建 clone 模式 对象 原型 设计模式

创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是“将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。

概述:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的新对象。

原型模式包含如下角色:

  • 抽象原型类:规定了具体原型对象必须实现的的 **clone() **方法。
  • 具体原型类:实现抽象原型类的 clone() 方法,它是可被复制的对象。
  • 访问类:使用具体原型类中的 clone() 方法来复制新的对象。

原型模式的克隆分为浅克隆和深克隆。

浅克隆:创建一个新对象,新对象的属性和原来对象完全相同,对于非基本类型属性,仍指向原有属性所指向的对象的内存地址。

深克隆:创建一个新对象,属性中引用的其他对象也会被克隆,不再指向原有对象地址。

Java中的Object类中提供了 clone() 方法来实现浅克隆。 Cloneable 接口是上面的类图中的抽象原型类,而实现了Cloneable接口的实现类就是具体的原型类。代码如下:

Realizetype(具体的原型类):

public class Realizetype implements Cloneable {

    public Realizetype() {
        System.out.println("具体的原型对象创建完成!");
    }

    @Override
    protected Realizetype clone() throws CloneNotSupportedException {
        System.out.println("具体原型复制成功!");
        return (Realizetype) super.clone();
    }
}

PrototypeTest(测试访问类):

public class PrototypeTest {
    public static void main(String[] args) throws CloneNotSupportedException {
        Realizetype r1 = new Realizetype();
        Realizetype r2 = r1.clone();//不是通过构造函数复制的

        System.out.println("对象r1和r2是同一个对象?" + (r1 == r2));//true
    }
}

注意:clone()是浅克隆,要实现深克隆可以使用序列化和反序列化来创建对象

标签:克隆,Realizetype,--,创建,clone,模式,对象,原型,设计模式
From: https://www.cnblogs.com/hudad/p/18284197

相关文章

  • [Mysql]事务/隔离级别
    1.3事务在理解事务的概念之前,接触数据库系统的其他高级特性还言之过早。事务就是一组原子性的SQL查询,或者说一个独立的工作单元。如果数据库引擎能够成功地对数据库应用该组查询的全部语句,那么就执行该组查询。如果其中有任何一条语句因为崩溃或其他原因无法执行,那么所有的语句......
  • 【微信小程序】页面生命周期onShow,onLoad,onReady的差别
    1.触发时机和条件onLoad:触发时机:页面加载时触发,即当页面被创建并准备加载时。触发条件:首次打开页面时调用,之后页面再次打开(如通过页面跳转返回)则不会再次触发。作用:通常用于页面的数据初始化,如从服务器获取数据、设置页面的初始状态等。onShow:触发时机:页面显示时触发,......
  • [Mysql]MVCC
    多版本并发控制MVCCMySQL的大多数事务型存储引擎实现的都不是简单的行级锁。基于提升并发性能的考虑,它们一般都同时实现了多版本并发控制(MVCC)。不仅是MySQL,包括Oracle、PostgreSQL等其他数据库系统也都实现了MVCC,但各自的实现机制不尽相同,因为MVCC没有一个统一的实现标准。可以......
  • 内存缓存选型
    背景tcp网关出现了内存泄漏的现象,经排查后发现是一个java原生内存缓存导致的。Map<String,String>belongCache=newConcurrentHashMap<>();该内存缓存作为兜底缓存使用,主要逻辑是读取redis用户身份信息后,有则更新到内存缓存,没有则从内存缓存中获取缓存数据。该内存缓存直......
  • 博客屋网址导航自适应主题php源码
    博客屋网址导航自适应主题php源码v1.0是一个以PHP+MySQL进行开发的网址导航源码。模板源码后台开源无加密,可二次开发,前端响应式自适应多端屏幕。主题源码适合个人建站技术,个人博客论坛,个人日记分享等个人网站内容。站长也可以修改成其他行业的内容目录导航。演示地址http://cn......
  • hutool分批次读取excel数据
     hutool分批次读取excel数据Hutool是一个Java工具类库,它提供了一些实用的API来处理Excel文件。要使用Hutool分批次读取Excel数据,你可以使用ExcelReader类。以下是一个示例代码,展示了如何使用Hutool分批次读取Excel数据:importcn.hutool.poi.excel.ExcelReader;......
  • 开发常用语句
    sql注入问题优化,orderby里面不能用下面这种方式,为了防止sql注入,验证输入的值是否合法,比如只能包含英文,数字和下划线应以英文开头Map<String,Object>parameters=newHashMap<>();sql.append("where(lzbhlike:keywordorlzmclike:keyword)");parameters.put("keyw......
  • 基于Kube-Prometheus/v0.13.0的K8S监控部署
    Kube-Prometheus不同版本支持的Kubernetes版本信息如下:kube-prometheusstackKubernetes1.22Kubernetes1.23Kubernetes1.24Kubernetes1.25Kubernetes1.26Kubernetes1.27Kubernetes1.28release-0.10✔✔✗✗xxxrelease-0.11✗✔✔✗xxx......
  • threejs入门2:Creating a scene
    参考:https://threejs.org/docs/index.html#manual/en/introduction/Creating-a-sceneThegoalofthissectionistogiveabriefintroductiontothree.js.Wewillstartbysettingupascene,withaspinningcube.Aworkingexampleisprovidedatthebottomof......
  • 【设计模式(二)】创建型模式--抽象工厂模式
    创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是“将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。抽象工厂模式也是⼀种创建型设计模式,提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类抽象工厂模式与工......