当前位置:科技动态 > 白话设计图案原型图案

白话设计图案原型图案

  • 发布:2023-10-10 15:53

码农在路上

人们总是想急功近利。付出一点努力却看不到结果,很容易放弃。如果付出一点努力就能得到回报,那么世界就会大乱。有些努力需要几年、十年、甚至几十年。每年都会有回报,那么这样的努力就没意义了吗?就像你读一本哲学书时,你不应该去想读完这本书后你会得到多少钱。这是不现实的。它不但不会给你带来金钱,还可能给你带来痛苦和痛苦。它给你深刻的思考,但是深思熟虑之后,痛苦过去之后,可能会对你的生活产生巨大的影响,改变你对事务的看法,以及你对人生的看法。这种思想上的收获,从某种意义上来说,已经超越了财富的收获,所以我们做事的时候,应该认真地去做,少一些功利性,多一些理想主义,但是这种理想主义并不是那种廉价劳动力没有价值,但有思想的劳动力。

介绍

原型模式用于创建重复的对象,同时保证性能。这种类型的设计模式是一种创建模式,它提供了创建对象的最佳方式。方式。我们在设计程序的时候通常会创建很多对象,随着我们的不断开发,我们会发现很多对象在使用过程中是相似的甚至是相同的。如果我们不使用原型模式,那么我们需要执行类似下面的操作(翻出之前的代码),大量的set方法,这段代码看起来很“整齐”、“干净”,但都是无脑的没有任何技术含量的体力劳动。这种方法不仅浪费大量的编写时间,而且效率也不高,因为需要对对象进行一一初始化和赋值。原型模式就是为了解决这种无脑操作的。

克隆这个词大家一定都很熟悉。 1996年,世界上第一个克隆生物——克隆羊多莉——在英国爱丁堡罗斯林研究所克隆出来。我们的原型模型也采用了克隆的思想,如下我们都称之为复制。原型模式是复制原型对象,然后创建一个与复制的对象相同的对象(但它们不是同一个对象,只是相同的类型),但并不是通过对象来构造的。函数是赋值的,但是是根据内存的二进制流进行复制的,所以比复制一个新的对象效率更高。

java为我们提供了内置原型接口(可克隆)。如果要复制对象,则必须实现 Cloneable接口。它是一个空接口,不包含任何方法,它只是一个规范。要实现Cloneable接口,我们只需要重写类中Object的clone()方法,这样就可以复制对象了。注意:如果没有实现Cloneable接口,则直接使用Object的clone()。 ) 方法,那么就会抛出异常(CloneNotSupportedException),因为 JVM 识别出该类没有实现 Cloneable 接口,无法安全复制。我们来看看他们的实现关系 

代码实现

假设我有一个女朋友。她身高170厘米,体重55公斤,胸围90。她很漂亮,但不太温柔。因为和她在一起久了,我有点厌倦她了,但我还是喜欢她。她的身高和美貌,我想复制一个和她身高、体重、胸围一样的女孩,但我希望我复制的女孩非常温柔、体贴。因为我手里有原型工具,所以我直接开始按照我的要求输入,然后等待副本。过了一会儿,我想要的女孩出来了。她们一模一样,但复制出来的女孩却很温柔。我们用具体的代码来实现一下。

1。首先定义一个原型类; 让它实现Cloneable接口,覆盖Object的clone()方法 

从clone()方法中我们可以看到,它使用了super.clone()来进行复制。 super.clone() 直接使用内存的二进制流进行复制。在复制的过程中,会为目标对象分配一块内存。所以他们的地址不一样,但是类型是一样的。

从上面可以看出clone()方法被native修改了。可以看出,它调用的并不是Java层面的方法,而是JVM中的方法(JVM部分是用C++编写的)。自然不是基于Java层面的构造函数。复制。

2。客户来电

如图所示,我复制了一个我喜欢的类型的新女友。她和我原来的女朋友有着相同的身体基因,但是她很温柔,很体贴,是我喜欢的类型。有一天,我根据他们两个的性格,给他们分配了不同的任务。首先,他们都必须知道如何做饭和洗衣服。因为前女友脾气暴躁,所以我不让她给我按摩脚。 ,我让温柔的新女友帮我按摩洗脚。我又把他们两个改造了一遍,让他们两个开始做任务。

但是现在发生了一些事情,发生了一些严重的事情。我刚刚请新女友帮我按摩洗脚。现在我的老女朋友也给我按摩、洗脚。他脾气这么暴躁,生怕会杀了我。我仔细思考了这个问题,沉思了很久。原来他们的身高、体重、胸围是基本要求(基本型),但他们的任务却不是基本型(参考型),所以在改造过程中就出现了。有问题了,不该分配的任务都分配给了原来的女朋友,所以查了很多资料,原来是我对它们进行了浅拷贝,所以才变成这样。为了我的生活,我需要再一次转变。

对它们进行深层复制

1。对原型类进行改造,添加序列化接口Serialized,也是一个空接口。我们编写了 deepClone() 方法,使用流和序列以标准化方式复制。

2。客户来电。

我们发现原来的女朋友不再有按摩、洗脚的任务,她的命终于保住了。使用深度克隆后,我们发现他们的两个任务不再相同。为什么之前用浅克隆的时候都是一样的?因为他们的任务是引用类型。使用浅克隆时,复制的不是它们的值,而是它们的地址。使用深度克隆后,它们以流的形式进行复制。

以上是我照搬女朋友的例子对原型模式的理解,但现实中我还是单身。其实从上面的例子我们发现,只有身高、体重、胸围这三个属性的值没有出现。变化,我们重新分配了其他属性,那么你可能会说,没必要用原型模式吧,是的,少了可能体现不出来,但是如果这个类属性很多,而且特别复杂,,你会吗还是选择一一拿套?

相关文章

最新资讯