设计模式——创建类型之原型模式

it2023-10-14  68

设计模式——创建类型之原型模式

背景说明原型模式 代码链接吐槽

背景

本人从事开发工作也有多年,目前坐标湖南长沙,以前在各种平台也发过一些文章但是都没有坚持下来; 这个系列是要写设计模式的,将23大设计模式逐一用自己的理解加例子写出来。 其一、眨眼就到了而立之年,觉得自己记忆力也是下降久做过的东西总是记不起,果然是好记性不如烂笔头。 其二、这么多年白嫖了网上很多的文章,视频,一直觉得应该分享一些东西但总是沉不下心去做。 其三、可能写的不好至少也留下一些东西,也是希望能帮助到一些朋友。

说明

在我的理解里:每一种设计模式仅仅是一种思想,并不是说每个设计模式之间就会有很明确的边界。有时候你会觉得某两种设计模式实现起来特别像,其实是因为有些的设计模式延伸出来的仅仅是着重的看待点不一样而已;学习设计模式一定不是只学习固定的实现方式。要了解设计思想,然后在项目中灵活得进行最适合设计。

原型模式

原型模式: 以某个对象为原型,复制(克隆)出一个对象!

直接上一段实现代码 克隆类

//主要是 implements Cloneable 接口 public class ImageFile implements Cloneable { String mPath; String mImageRes; public String getPath() { return mPath; } public void setPath(String path) { this.mPath = path; } public ImageFile(String path, String imageRes) { mPath = path; mImageRes = imageRes; Log.d("Create ImageFile"); } //并且实现clone方法 @Override public Object clone() throws CloneNotSupportedException { Log.d("clone ImageFile"); return super.clone(); } @Override public String toString() { return "ImageFile{" + "mPath='" + mPath + '\'' + ", mImageRes='" + mImageRes + '\'' + '}'; } }

调用示例

//原型模式 try { ImageFile imageFile = new ImageFile("d:", "1111122222"); ImageFile imageFile1 = ( ImageFile) imageFile.clone(); imageFile1.setPath("c:"); Log.d("是否同一个对象:" + (imageFile == imageFile1)); Log.d(imageFile.toString()); Log.d(imageFile1.toString()); } catch (CloneNotSupportedException e) { e.printStackTrace(); }

如果是简单类型的原型拷贝只需要简单实现clone()方法即可。如果需要深拷贝里面引用类型也需要进行拷贝!

就是说如果一个类里面有一个引用的对象,你只实现这个类的clone那么clone出来的这个类对象中的引用对象还是原来的那个引用对象。

如果要实现深拷贝需要将该类里面的所有引用对象也全部拷贝一份!! 这里不贴出来深拷贝示例,但是代码链接里面有一个简单的示例,有兴趣可以自己先实现一下,再去看看。

代码链接

原型代码连接.

吐槽

距离发之前的7大设计原则已经好些天,本想很快把这个系列的代码以及文章写出来,但忙着进行考试…(毕业近十年后突然决定重新报了一个自学考试,让自己恶补一下大学计算机相关基础知识),想写的知识相关代码其实敲了一些,文章一直跟不上,还是不太习惯写文章,怕自己说不清楚,于是准备多打字说明,如果对说明文字有不理解希望可以指出。

最新回复(0)