文章目录

  • 0 设计模式
  • 1 原型模式
  • 2 实现思路
    • 2.1 浅克隆
    • 2.2 深克隆
  • 3 需要的类
  • 4 具体实现
    • 4.1 浅克隆
    • 4.2 深克隆
  • 5 思维导图
  • 6 示例源码地址
  • 最后

0 设计模式

不了解设计模式的小伙伴可以通过这篇文章了解一下什么是设计模式

https://blog.csdn.net/qq_42874315/article/details/120006447

1 原型模式

原型模式的本质就是克隆,原型就相当于是一个可供复制的模板,在我们日常使用的时候,无需重新new对象和赋值,直接克隆对象即可。

对象的创建方式有两种

  1. new一个对象,指定属性
  2. 如果新的对象和原来的对象属性差不多,这时可以从原对象克隆

2 实现思路

克隆又分为深克隆和浅克隆

2.1 浅克隆

克隆后的对象中的属性和被克隆对象的属性指向同一个引用,也就是说被克隆对象改变属性,克隆对象也会变

2.2 深克隆

克隆对象和被克隆对象指向的地址不同,一个对象属性的改变不会造成被克隆对象属性的改变

3 需要的类

这里采用Java自带的原型模式

  1. 需要被克隆的类实现Cloneable接口

  2. 重写clone方法

  3. 注意,深克隆和浅克隆的区分就在clone方法中

    浅克隆:在clone方法中:return super.clone()

    深克隆:在clone方法中:新建一个对象,新对象 = super.clone(),然后return 新对象

4 具体实现

4.1 浅克隆

/*** 浅克隆(两个对象指向同一个引用,会有影响)* @Author ChenJiahao(程序员五条)* @Date 2021/8/26 22:27*/
public class Test {public static void main(String[] args) {Person p1 = new Person();try {Person p2 = (Person) p1.clone();System.out.println(p2.age + " " + p2.score );System.out.println(p2.loc);System.out.println(p1.loc == p2.loc);p1.loc.street = "sh";System.out.println(p2.loc);} catch (CloneNotSupportedException e) {e.printStackTrace();}}
}class Person implements Cloneable{int age = 8;int score = 100;Location loc = new Location("bj",22);@Overridepublic Object clone() throws CloneNotSupportedException {return super.clone();}
}
class Location{String street;int roomNo;public Location(String street, int roomNo) {this.street = street;this.roomNo = roomNo;}@Overridepublic String toString() {return "Location{" +"street='" + street + '\'' +", roomNo=" + roomNo +'}';}
}

4.2 深克隆

/*** 深克隆处理(克隆与被克隆对象之间没有影响了)* @Author ChenJiahao(程序员五条)* @Date 2021/8/26 22:27*/
public class Test {public static void main(String[] args) {Person p1 = new Person();try {Person p2 = (Person) p1.clone();System.out.println(p2.age + " " + p2.score );System.out.println(p2.loc);System.out.println(p1.loc == p2.loc);p1.loc.street = "sh";System.out.println(p2.loc);} catch (CloneNotSupportedException e) {e.printStackTrace();}}
}class Person implements Cloneable{int age = 8;int score = 100;Location loc = new Location("bj",22);@Overridepublic Object clone() throws CloneNotSupportedException {Person p = (Person) super.clone();p.loc = (Location) loc.clone();return p;}
}class Location implements Cloneable{String street;int roomNo;public Location(String street, int roomNo) {this.street = street;this.roomNo = roomNo;}@Overridepublic String toString() {return "Location{" +"street='" + street + '\'' +", roomNo=" + roomNo +'}';}@Overridepublic Object clone() throws CloneNotSupportedException {return super.clone();}
}

5 思维导图

6 示例源码地址

https://github.com/ChenJiahao0205/design-pattern/tree/master

最后

我是通过马士兵老师的视频和菜鸟教程学习的,部分内容可能会有雷同

想设计模式相关文章,欢迎到我的专栏【设计模式学习笔记】、【设计模式】中去查看

在23篇设计模式文章发布完成之后,我会公开完整的思维导图,点关注,不迷路

感谢大家看到这里,文章如有不足,欢迎大家指出;彦祖点个赞吧彦祖点个赞吧彦祖点个赞吧,欢迎关注程序员五条

【学习笔记】设计模式-原型模式/克隆模式(Prototype)相关推荐

  1. [学习笔记]设计模式[6]-{适配器模式外观模式}

    设计原则 最少知识原则:只和你的密友谈话 这个原则的意思是,在系统设计的过程中,不要让太多的类耦合在一起,免得对系统一部分的修改会影响到其他部分.在设计系统之前,应该首先注意对象与对象之间的交互关系, ...

  2. 设计模式学习笔记——抽象工厂(Abstract Factory)模式

    设计模式学习笔记--抽象工厂(Abstract Factory)模式 @(设计模式)[设计模式, 设计模式中文名, 设计模式英文名] 设计模式学习笔记抽象工厂Abstract Factory模式 基本 ...

  3. java/android 设计模式学习笔记(8)---桥接模式

    这篇博客我们来介绍一下桥接模式(Bridge Pattern),它也是结构型设计模式之一.桥接,顾名思义,就是用来连接两个部分,使得两个部分可以互相通讯或者使用,桥接模式的作用就是为被分离了的抽象部分 ...

  4. Redis学习笔记~分布式的Pub/Sub模式

    redis的客户端有很多,这次用它的pub/sub发布与订阅我选择了StackExchange.Redis,发布与订阅大家应该很清楚了,首先一个订阅者,订阅一个服务,服务执行一些处理程序(可能是写个日 ...

  5. 【OS学习笔记】三十三 保护模式九:分页机制对应的汇编代码之---用户程序代码

    本片文章是以下两篇文章: [OS学习笔记]三十 保护模式九:段页式内存管理机制概述 [OS学习笔记]三十一 保护模式九:页目录.页表和页三者的关系详解 对应的用户程序汇编代码. ;代码清单16-2;文 ...

  6. 【OS学习笔记】三十 保护模式九:段页式内存管理机制概述

    上几篇文章学习了任务切换相关知识,如下: [OS学习笔记]二十六 保护模式八:任务门-任务切换 [OS学习笔记]二十七 保护模式八:任务切换的方法之----jmp与call的区别以及任务的中断嵌套 今 ...

  7. 【OS学习笔记】十六 保护模式四:进入保护模式与在保护模式下访问内存的汇编代码

    本文记录的是之前四篇文章所对应的汇编代码.四篇文章分别是: [OS学习笔记]十二 现代处理器的结构和特点 [OS学习笔记]十三 保护模式一:全局描述符表(GDT) [OS学习笔记]十四 保护模式二:段 ...

  8. Windows x64内核学习笔记(二)—— IA-32e模式

    Windows x64内核学习笔记(二)-- IA-32e模式 IA-32e模式 模式检测 强制平坦段 任务切换 中断门描述符 FS / GS 模式切换 32位程序进内核 64位程序进内核 实验:模式 ...

  9. Redis 学习笔记八:集群模式

    Redis 学习笔记八:集群模式 作者:Grey 原文地址: 博客园:Redis 学习笔记八:集群模式 CSDN:Redis 学习笔记八:集群模式 前面提到的Redis 学习笔记七:主从复制和哨兵只能 ...

最新文章

  1. sql 2005提示未能加载包Microsoft SQL Management Studio Package
  2. 带宽计算方法 及 大B与小b 说明
  3. java search 不能使用方法_elasticsearch(七)java 搜索功能Search Request的介绍与使用...
  4. 【solr5.5环境搭建】在tomcat8里面部署solr5.5
  5. [蓝桥小记]蓝桥杯参赛经历分享
  6. 需求分析挑战之旅(疯狂的订餐系统)(8)——最后的疯狂
  7. linux天气软件,类似智能手机!Linux中安装Conky天气插件
  8. php+mysql+apache 环境搭建
  9. 全网首发:为什么解码器长时间没有画面?如何解决?
  10. leetcode 53. Maximum Subarray(DP动态规划问题)
  11. 推荐一本go语言入门书籍
  12. 软件测试 实验一 软件测试案例分析
  13. python学习笔记(七) os模块与窗体控制
  14. python求三重积分_python Scipy积分运算大全(一重、二重及三重积分)
  15. 人工智能时代对人类就业有哪些影响,我们应该如何应对?
  16. NOIP训练 czy的后宫5(树形dp)
  17. PT 系列 00·小谈 pt-kill
  18. 微信公众号点击菜单出现白屏问题探究
  19. 第三代大数据处理方案Flink
  20. 每日词根——sol(完整可靠安慰,太阳严肃)

热门文章

  1. c++中的constexpr与inline
  2. 【CSDN编程挑战赛第六期—参赛体验+思路】
  3. python box2d例子_box2dpython教程
  4. 笔记本保养的一些误区你要注意了
  5. Springboot项目启动后自动打开浏览器访问(超实用)
  6. MySQL分组后取每一组第N条数据
  7. 朋友圈发图多大不会被压缩_孕期多吃四类食物,生出来的宝宝颜值通常不会低,眼睛大皮肤也好...
  8. java工资管理系统课程设计_课程设计,工资管理系统完整源代码
  9. 【图像处理】jpeg图片格式详解
  10. 《从一到无穷大》阅读笔记2