深度好文:设计模式之——原型模式

2023-02-24 0 860

先赞再看,多好的生活习惯。

深度好文:设计模式之——原型模式

那时跟我们撷取呵呵程序语言中的“蓝本商业模式”。

简述

当控制系统中须要大批建立完全相同或是相近的第一类时,就能透过“蓝本程序语言”来同时实现。蓝本商业模式是“建立型程序语言”中的一类。

蓝本商业模式的核心思想是,透过复本选定的“蓝本示例(第一类)”,建立跟该第一类那样的新第一类。单纯认知是“布季夫选定第一类”。

这儿提及的“蓝本示例(第一类)”,是被布季夫的第一类,它的促进作用是选定要建立的第一类类型

深度好文:设计模式之——原型模式

须要复本的蓝本类必须同时实现”java.lang.Cloneable“接口,然后重写Object类中的clone方法,从而才能同时实现类的复本。

Cloneable是一个“标记接口”,所谓的标记接口是该接口中没有任何内容。标记接口的促进作用是为了给所有同时实现了该接口的类赋予一类特殊的标志。

深度好文:设计模式之——原型模式Cloneable接口源码

只有当一个类同时实现了Cloneable接口后,该类才会被赋予调用重写自Object类的clone方法得权利。否则会抛出“CloneNotSupportedException”异常。

深度好文:设计模式之——原型模式clone方法的源码

浅复本和深复本

蓝本商业模式中的复本第一类能分为:“浅复本”和“深复本”。

浅复本:

1、当类的成员变量是基本数据类型时,浅复本会复制该属性的值赋值给新第一类。2、当成员变量是引用数据类型时,浅复本复制的是引用数据类型的地址值。这种情况下,当复本出的某一个类修改了引用数据类型的成员变量后,会导致所有复本出的类都发生改变。

深拷贝:

深复本不仅会复制成员变量为基本数据类型的值,给新第一类。还会给是引用数据类型的成员变量申请储存空间,并复制引用数据类型成员变量的第一类。这样复本出的新第一类就不怕修改了是引用数据类型的成员变量后,对其它复本出的第一类造成影响了。

代码

透过单纯的文字描述可能我们对该商业模式的认知还是不够全面,下面让我们透过代码来深入了解呵呵。

浅复本

案例:一个人,名叫“小菜鸟”,职业是“程序员”。现在因项目需求剧增,导致一个人无法按时完成任务,从而须要布季夫出来属性与其一模那样的优秀程序员。

蓝本类代码:

深度好文:设计模式之——原型模式

测试类:

深度好文:设计模式之——原型模式

执行结果:

深度好文:设计模式之——原型模式

深复本

在Person类中添加一个是引用数据类型的成员属性Computer。

Computer类:

深度好文:设计模式之——原型模式

蓝本类:

该类中列举了两种方式,重写clone方法时任选其一即可,推荐使用方式二。

深度好文:设计模式之——原型模式
深度好文:设计模式之——原型模式
深度好文:设计模式之——原型模式
深度好文:设计模式之——原型模式

注意:以上两个类中同时实现Serializable接口是为了完成方式二中透过序列化来完成深复本,如果选择方式一能不同时实现Serializable接口。

测试代码:

深度好文:设计模式之——原型模式

运行结果:

深度好文:设计模式之——原型模式

透过以上两种方式都能同时实现类的深复本,并且我也已经测试过了,具体测试代码就不在此赘述了,有兴趣的读者能自己试呵呵,就修改呵呵是引用数据类型的成员属性值和clone方法即可。

总结

增、减属性)时,布季夫的第一类也会做出相应的改变。4、对已经建立好的类进行改造,使其支持布季夫时须要修改源代码,这是违背了ocp原则。

那时的撷取就到这儿了,如果感觉“菜鸟”写的文章还不错,记得点赞加关注呦!你们的支持是我坚持下去的动力。文章哪里写的有问题的也希望我们能指出,我会虚心受教。

深度好文:设计模式之——原型模式
举报/反馈

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务