纯手写理解设计模式代码之原型模式

设计模式C++实现(5)——原型模式、模板方法模式 软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书,对于每个模式,用C++写了个小例子,加深一下理解。主要参考《大 阅读详情

原型模式

也称为克隆模式,属于创建型模式

普通版
package com.demo.prototype;

/**
 * 原型模式(克隆模式)
 * 创建型模式
 * 就是通过原型对象返回一个完全相同或相近的对象,包括其中的属性值
 * 可以在不知道对象的具体类型的情况下创造对象
 * 并且对于那些创建十分耗时的对象来说,clone比new速度快
 */
public class Prototype implements Cloneable{
    //JDK中有实现原型模式的方法,但是该对象所对应的类必须实现Cloneable的接口
    Prototype prototype = new Prototype();
    public  Prototype Clone() throws CloneNotSupportedException {
        return (Prototype) prototype.clone();
    }
}
深克隆原理版
package com.demo.prototype;

/**
 * 深克隆原理版
 * 由下可看出:
 * 无论是对克隆对象d1的Y或者通过d1修改C的X的值
 * 都不再对原型对象的值进行修改,也就是互不影响了
 * 原理:
 * 深克隆在对原型对象进行克隆时,会将原型对象的每个引用类型的属性也克隆一份
 * 并且赋值给克隆对象
 */
public class DeepPrototype {
    public static void main(String[] args) throws CloneNotSupportedException {
        C c = new C();
        c.setX(1);
        D d = new D();
        d.setY(2);
        d.setC(c);
        D d1 = (D)d.clone();
        d1.setY(3);
        System.out.println(d.getY()+"----"+d.getC().getX());//2--1
        System.out.println(d1.getY()+"----"+d1.getC().getX());//3--1
        d1.getC().setX(4);
        System.out.println(d.getY()+"----"+d.getC().getX());//2--1
        System.out.println(d1.getY()+"----"+d1.getC().getX());//3--4
    }
}

class C implements Cloneable {
    private int x;

    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }
}

//实现Cloneable接口
class D implements Cloneable {
    private int y;
    private C c;

    @Override
    public Object clone() throws CloneNotSupportedException {
        /**
         * 1.调用clone方法获取克隆对象
         * 2.获取c对象
         * 3.将c对象的克隆对象存入d克隆对象中
         */
        D d = (D) super.clone();
        C c = d.getC();
        d.setC((C) c.clone());
        return d;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public C getC() {
        return c;
    }

    public void setC(C c) {
        this.c = c;
    }
}
深克隆进阶版
package com.demo.prototype;

import java.io.*;

/**
 * 深克隆进阶版
 * 序列化反序列化实现深克隆
 *
 *
 */
public class DeepPrototypeer {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        E e= new E();
        e.setA(1);
        F f =new F();
        f.setB(2);
        f.setE(e);
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ObjectOutputStream os = new ObjectOutputStream(bos);
        os.writeObject(f);
        ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bos.toByteArray()));
        F f1 =(F)ois.readObject();
        f1.setB(3);
        f1.getE().setA(4);
        System.out.println(f.getB()+"--"+f.getE().getA());//2--1
        System.out.println(f1.getB()+"--"+f1.getE().getA());//3--4
    }
}

class E implements Serializable {
    private int a;

    public int getA() {
        return a;
    }

    public void setA(int a) {
        this.a = a;
    }
}

class F implements Serializable{
    private int b;

    private E e;

    public int getB() {
        return b;
    }

    public void setB(int b) {
        this.b = b;
    }

    public E getE() {
        return e;
    }

    public void setE(E e) {
        this.e = e;
    }
}
【设计模式】用Java手写21种常见设计模式 文章目录十二、行为1——模板方法模式十三、行为2——迭代器模式 配套使用效果更佳: 本博客配套开源源码github点击跳转 在《25种常见设计模式思想(上)》中我介绍了4种创建型设计模式和7种结构型设计模式,在此博客中我将继续介绍剩下的x种行为类设计模式。以下是本篇博客的思维导图: 十二、行为1——模板方法模式 模板方法模式非常类似于定制表格,设计者先将所有需要填写的信息头(字段名)抽取出来,再将它们整合在一起成为一种既定格式的表格,最后让填表人按照这个标准化模板去填写自己特有的信息,而不必为书写内容、先 阅读详情

相关推荐

设计模式(对象创建)——原型模式

原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 场景还原(找工作准备简历):假设没有打印设备,因此需手写简历,这些简历的内容都是一样的。这样有个缺陷,如果要修改简历中的某项,那么所有已写好的简历都要修改,工作量很大。随着科技的进步,出现了打印设备。我们只需手写一份,然后利用打印设备复印多份即可。如果要修改简历中的某项,那么修改原始的版本就可以了,然后再复印。原始的那份手写

Z's Palace 540

设计模式06:原型模式

系列总链接:https://blog.youkuaiyun.com/qq_22122811/article/details/112360387 参考: 对上述链接作者表示感谢,如有侵权,望告知,立删! 一:概述 在这个定义中,最重要的一个词是“拷贝”,也就是口头上的复制,而这个拷贝,也就是原型模式的精髓所在。 二:结构与实现 结构图: 由于克隆需要一个原型,而上面的类图中Prototype就这个原型,Prototype定义了克隆自身的Clone接口,由派生类进行实现,而实现原型模式的重..

MatthewMao 210

设计模式(简单工厂模式_排序)手写代码.rar

设计模式(简单工厂模式_排序)手写的代码,自己写博客用

设计模式之-原型模式

原型提供了另外一种创建对象的方式:通过已有的对象的自身提供的克隆功能来创建新的对象。 这样做的好处很明显: 1.使用克隆来创建对象的用户不需要知道对象的构造细节; 2.性能上有利。 但采用克隆来生成对象也要注意需要克隆的内容,如果采用全复制的话,有些业务上可能会产生逻辑错误,比如对象ID冲突等。 克隆分为深度克隆和浅度克隆。一般来讲使用浅度克隆比较好,不会使得业务逻辑变得很复杂。 =======...

javasalatu 172

Java设计模式——原型模式

Java设计模式——原型模式 原型模式Java设计模式——原型模式概念使用场景Java里的克隆代码理解prototype(原型)问题总结优缺点模型优点模型缺点 概念 ​ 原型模式是创建型模式的最后一种,讲到原型模式就不得不提到克隆这个词,克隆这个词大家首次看见应该是在初中生物课本上,来源于那只多莉吧。就好比我们有一份文件A,想要再得到一份同样的文件B,通常我们选择拷贝一份,也就是copy。克隆也是如此,针对于原型进行克隆。也就是说克隆==拷贝 通俗的说 原型模式就是以某个东西为原型把它进行拷贝 使用场景 ​ 例如:我们在创建一个A类,其中定义了很多方法,上面提了一个需求,让你再创建一个B,

一图文带您认识磁编码器

磁编码器是以磁电原理技术生产的编码器。 磁编码器工作原理: 当电流通过一个位于磁场中的导体的时候,磁场会对导体中的电子产生一个垂直于电子运动方向上的的作用力,从而在垂直于导体与磁感线的方向上产生电势差。 如果让施加在这个导体上的磁场以电流流经路径为轴线,按照上图箭头所示的方向旋转,那么这个霍尔电势差就会因为磁场与导体之间角度的改变而发生变化,而这个电势差的变化趋势,与之前一文中次级线圈旋转时的输出电压一样,是一条正弦曲线。因此,基于这个通电导体两侧的电压,就可以反推计算出磁场旋转的角度了。 .

encoder_yang的博客 2万+

设计模式之原型模式

参考链接:https://blog.youkuaiyun.com/brave2211/article/details/18369201 1.克隆羊问题 现在有一只羊 tom,姓名为: tom, 年龄为:1,颜色为:白色,请编写程序创建和 tom 羊 属性完全相同的 10只羊。 1.1 思路分析: 1.2 传统应用 Sheep.java public class Sheep { privat...

weixin_30487701的博客 247

[华为]华为无线控制器AC6508简单配置实例

用户需求:3个地址段,分别是领导、员工、访客,访问控制策略是只允许访客上网,不允许访客访问内网。 vlan173为设备的管理地址和AP获取的地址,领导、员工、访客的vlan分别是vlan131/vlan132/vlan133 首先是许可的下载,使用华为的账号登陆http://app.huawei.com/isdp ,然后按照说明输入许可,下载许可,将许可导入到设备。 web界面访问后,直接按照配置向导配置就可以了。 1.基本配置里主要配置license、设备名称、设备时间 2.端口配置:连接上

日子_很简单 2万+

Java设计模式之原型模式

Java设计模式之原型模式 时间隔了好几天了,今天写一下设计模式中的原型模式,示例代码几天前已经瞧好了,想做一些优化,方便大家对这个模式的理解更加深入一点,另外也需要找更多详细点的资料 一 : 含义 什么是原型模式 ?     使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种对象创建型模式。 二 : 解决的问题          多个相同对象重复创建的较大开

weixin_47301645的博客 1319

孤读paper——《GhostNet:More Features from Cheap Operations》

《GhostNet:More Features from Cheap Operations》   发现一个点并解决就是一篇CVPR,该文章主要发现了优秀的网络的特点是feature map提取过程中的冗余性,这种冗余性体现在很多成对的feature map间很像,就好像彼此的“ghost”,而这种特征冗余性对于理解图像来说还是必要的,所以文章把feature map分为两种,一种是本质特征,一...

雄关漫道真如铁 而今迈步从头越 5151

SpeedyBee F405 V3 50A飞塔装机全攻略:从开箱到首飞避坑指南

本文提供SpeedyBee F405 V3 50A飞塔的详细装机指南,涵盖从开箱检查、硬件焊接、软件配置到安全首飞的全流程。重点剖析了电源连接、固件刷写等高频故障点,帮助FPV新手避开常见陷阱,确保一次成功组装并安全起飞。

weixin_29179311的博客 416

原型模式:从生活中的“复制”到代码里的高效设计

本文从复印文件、奶茶制作等生活场景切入,讲解原型模式。该模式通过克隆现有对象避免重复复杂初始化,提升效率,包含抽象原型、具体原型、客户端三大角色。结合图形设计软件矩形克隆的 C++ 代码,说明模式实现,并对比深克隆与浅克隆的差异,分析了适用场景及优缺点,强调其本质是用复制代替新建,解决复杂对象重复创建问题。

2303_79953471的博客 1295

【STM32+K210项目】基于K210智能人脸识别+车牌识别系统(完整工程资料源码)

随着时代的进步和科技的迅猛发展,人们对居住安全的重视程度不断提升,对安全防范系统的需求也日益增强。在安防系统中,门禁系统占据着重要的位置。传统的门禁控制方式主要依靠钥匙、密码和门禁卡等,这些方式易于被破解和复制,安全性较低。然而,近年来,生物识别技术的迅速发展和成熟,为解决这一问题提供了新的方案。生物识别技术具备便携性、非易失性、不易遗忘以及难以盗用等优点,逐渐被引入到门禁系统中。传统的小区门禁系统往往依赖人工管理,存在一定的局限性,难以满足用户多样化的需求,也浪费了人力资源。

嵌入式技术开发 1万+

寂然解读设计模式 - 原型模式(上)

I walk very slowly, but I never walk backwards 设计模式 -原型模式(上) ​ 寂然 大家好~,我是寂然,.

weixin_44808014的博客 197

【BlueDroid】蓝牙音乐协议分析之A2DP和AVRCP连接流程(超详细)

AVCTP协议描述了蓝牙设备间Audio/Video的控制信号交换的格式和机制,他是一个总体的协议,具体的控制信息由其指定的协议(AVRCP)实现,AVCTP协议本身只指定控制Command和Response的总体的格式;这个过程中对应了Event中的btavrcp_play_status_changed_callback和btavrcp_play_position_changed_callback;上述为AVCTP-Control建立L2CAP连接的Command,对应H4的Sent (0x00);

风云说通信 7314

流程图详解Transformer最核心的多头注意力机制,QKV流向清晰明了

本文详细讲解了Transformer模型中的多头注意力机制(Multi-head Attention)。通过类比多人评估同一事物的不同视角,说明多头机制能综合多个注意力权重获得更有效的输出。文章逐步推导了多头注意力的计算过程:将输入矩阵X(4×512维)分别与8组Q、K、V权重矩阵相乘,得到8组head(每组4×64维),拼接后经Wo矩阵变换恢复为4×512维输出。整个过程涉及37个待训练参数矩阵(1个Wo、8组Wq/Wk/Wv)。该机制通过并行计算多个注意力头,能更全面捕捉输入特征间的复杂关系。

人工智能研究所的博客 259

【设计模式】——原型模式VS模板方法模式

不知道何种原因总是把原型模式和模板方法模式搞混,着实很苦恼啊!不知道大家是否有同样的困扰,有的话治疗,没有的话预防啊。故该文章进行详细对比学习! 原型模式 所谓的原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 解释:从一个对象再创建另外...

chouxian0781的博客 249

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C++原型模式详解:从原理到实践

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。这一模式的核心在于利用已有的对象模板(原型)来高效生成新对象,而非通过传统的构造函数从头创建。抽象原型类是整个模式的基础,它的核心作用是声明一个纯虚的clone方法,为所有具体原型类提供统一的接口标准。这个类不需要包含具体的业务逻辑,只需专注于定义复制行为的契约。核心要求必须声明纯虚clone方法,返回类型为指向自身的指针或引用(如作为抽象类,不能被实例化,仅用于被具体原型类继承。注意clone方法的返回类型支持协变。

qq_40343899的博客 1356

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

设计模式学习之原型模式

原型模式属于创建型模式,原型模式最典型的例子就是Java的深拷贝和浅拷贝 (clone方法)。 clone()方法将对象复制了一份并返还给调用者。所谓“复制”的含义与clone()方法是怎么实现的。一般而言,clone()方法满足以下的描述: (1)对任何的对象x,都有:x.clone()!=x。换言之,克隆对象与原对象不是同一个对象。 (2)对任何的对象x,都有:x.clone().getCla...

霜之哀伤 203

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: 纯手写理解设计模式代码之建造者模式
下一篇: 纯手写理解设计模式代码之代理模式
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值