原型模式(Prototype)
简介用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。
模型定义
用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。
用这种方式创建对象非常高效,根本无须知道对象创建的细节。
模型优缺点
- 优点
- 复制对象比创建对象快,提升了性能
- 缺点
- 主要注意对象的深复制还是浅复制
适用场景
- 对象之间相同或相似
- 对象的创建过程比较麻烦,但复制比较简单的时候
模型结构
- 抽象原型类:规定了具体原型对象必须实现的接口;
- 具体原型类:实现抽象原型类的clone()方法,它是可被复制的对象
- 访问类:使用具体原型类中的clone()方法来复制新的对象
模型实现
由于Java提供了对象的clone()方法,所以用Java实现原型模式很简单,原型模式的克隆分为浅克隆和深克隆Java中的Object类提供了浅克隆的clone()方法,具体原型类只要实现 Cloneable接口就可实现对象的浅克隆,这里的Cloneable接口就是抽象原型类。
package com.company.prototype;
public class PrototypePattern {
public static void main(String[] args) {
ConcreteClass class1 = new ConcreteClass();
try {
ConcreteClass class2 = (ConcreteClass) class1.clone();
System.out.println(class1 == class2);
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}
class ConcreteClass implements Cloneable {
public ConcreteClass() {
System.out.println("构造方法");
}
public Object clone() throws CloneNotSupportedException {
System.out.println("执行clone");
return (ConcreteClass) super.clone();
}
}
运行结果:
构造方法
执行clone
false
网页扫描二维码库:Html5-Qrcode,官网地址:https://scanapp.org/html5-qrcode-docs/
在前面我们学习了Redis的RDB的持久化,我们都知道RDB持久化会根据配置中的save对应的键和时间的触发机制来进行快照。但是不管怎么样,两次快照之间如果存在系统异常崩溃或者服务器宕机等情况,RDB就不能保证数据的强一致性了。这时候Redis提供了另外一种持久化方法AOF,AOF(Append Only File)记录Redis写入命令追加到日志文件。每写入一个命令都会被追加到文件中,所以AOF的数据一致性高于RDB。但是在默认情况下AOF是没有开启的,所以本文我们将介绍AOF的配置参数;
很多时候我们编写代码的过程中会发现,有些代码片段我们会重复的使用,如果我们重头到位的敲一遍会感觉有点浪费时间,所以VSCode给我们提供了一个很好的功能,就是自定义代码片段,本文主要介绍VSCode中如何定义Dart代码片段。
《向天再借五百年》是韩磊演唱的歌曲、由樊孝斌作词,张宏光作曲,该曲收录于韩磊2004年12月28日发行的专辑《帝王之声》中。该曲是电视剧《康熙王朝》主题曲。
在使用Python进行开发时,pip作为Python的包管理工具,是我们安装和管理Python库的重要工具。然而,有时候由于操作失误或其他原因,我们可能会不小心卸载了pip。这时,如何手动重新安装pip就显得尤为重要。本文将介绍两种手动安装pip的方法,帮助你快速恢复pip功能。
快速生成表格
Electron页面跳转、浏览器打开链接和打开新窗口
在使用Git的过程中,不想每次都输入用户名和密码去拉取代码,所以就需要保存这些信息,那么既然有保存了,就必须有清除功能。
Docker编译镜像出现:fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.12/main: temporary error (try again later)
WARNING: Ignoring APKINDEX.2c4ac24e.tar.gz: No such file or directory问题
在Mac电脑中,如何对Git的用户名和密码进行修改呢?起初不懂Mac,所以整了很久,本文将记录如何对这个进行操作,以便后期使用。