Android之大话设计模式——第五章:原型模式
更新时间:2023-05-11 15:00:01 阅读量: 实用文档 文档下载
- 大话设计模式 pdf推荐度:
- 相关推荐
【原创·教程·连载】《Android之大话设计模式》--设计模式创建型模式第五章:原型模式
<大话设计模式>
原型模式 肉麻情话
原型模式应用场景举例:
GG和MM经常在QQ上聊天,但是GG打字的速度慢如蜗牛爬行,每次MM在瞬间完成恢复或者问候是,GG都会很紧张的去尽力快速打字,尽管如此,还是让MM有些不高心,MM说回复信息这么慢,显然是用心不专,不在乎她。哎,GG也是百口难辩啊,不过也确实是没有办法。
有一天,GG想自己的密友K倾诉了自己的苦衷。K顿生大笑。说道:“傻瓜,你怎么不去网上收集一些肉麻的情话以及一些你们经常说话会涉及到主题,把这些东西拷贝下来保存在自己的电脑或者U盘里面,这样一来如果下次在聊天就可以借用过来了!”,“K就是K,我怎么没有想到呢~妙极~妙极^_^”,“不过不要太高兴,这些东西是要适当修改的,要不然你把名字都搞错的话,就等着你的MM把你踹死吧O(∩_∩)O哈哈~”K补充道,“嗯,说的对,谢谢K哥解决了我的心腹之患啊”GG乐不可支的说道。
这是MM由在网上和GG聊天,GG专门复制那些实现准备好的肉麻情话经过稍加修改后发给MM,MM都快美死了…
原型模式解释:
原型模式(Prototype Pattern)是一种对象创建型模式,它采取复制原型对象的方法来创建对象的实例。使用Prototype模式创建的实例,具有与原型一样的初始化数据
英文定义为:Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype.
原型模式的UML图:
原型模式涉及以下的角色:
客户端(Client)角色: 客户端提出创建对象的请求。
抽象原型(Prototype)角色:通常由一个Java接口或者Java抽象类来实现。从而为具体原型设立好规范。
具体原型(Concrete Prototype)角色:被复制的具体对象,此具体角色实现了抽象原型角色所要求实现的方法。
原型模式的UML图如下所示:
原型模式深入分析:
原型模式的工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。
Java在语言级别是直接支持原型模式的。我们知道,在ng.Object是一切类和接口的父类,而ng.Object正好提供了一个clone()方法来支持原型模式。当然,一个对象如果想具有被复制的能力,还必须声明自己实现了Cloneable接口,如果没有声明,就会在对象被复制的时候抛出CloneNotSupportedException.
在ng.Object中提供了一个 protected Object clone()方法来支持对象的克隆,子类可以采用默认的方式进行所有字段的复制,也可以在子类中覆盖clone()方便,根据实际需要定制自己的复制行为。
复制浅复制和深复制之分,浅复制是对基本数据类型和String类型而言的,深复制是对其他引用类型而言的。对于深复制,每一个应用也需要声明Cloneable接口。
原型模式使用场景分析及代码实现:
在上面的使用场景中,因为GG打字太慢经常被女朋友怪罪,所以有了拷贝网上肉麻情话的和主要聊天话题内容的办法。这样,以后GG每次和MM聊天的时候只需要把原话拷贝出来,加以适当修改就行,省时省力,而且效果绝佳^_^,这就是设计模式的原型模式的使用的好处O(∩_∩)O~
UML模型图如下所示:
建立一个肉麻情话类,类中有非常详细的注释,这里就不在解释了:
public List<String> getContents() { return contents; } /* * 设置肉麻情话集合 */ public void setContents(List<String> contents) { this.contents = contents; }
/* * 获取肉麻情话 */ public String getContent() { return content; } /* * 设置肉麻情话 */ public void setContent(String content) { this.content = content; }
/* * 肉麻情话覆盖了 Object 类的 clone()方法,因为这里有 List 引用进行深度复制 * @see ng.Object#clone() */ public SweetWord clone() {
最后我们建立测试客户端:
输出的结果如下:
原型模式的优缺点分析:
优点:
1.允许动态地增加或减少产品类。由于创建产品类实例的方法是产品类内部具有的,因此增加新产品对整个结构没有影响。
2.提供简化的创建结构。
3.具有给一个应用软件动态加载新功能的能力。
4.产品类不需要非得有任何事先确定的等级结构,因为原型模式适用于任何的等级结构。 缺点:
每一个类都必须配备一个克隆方法,这对于全新的类来说不是很难,而对已有的类来说实现
clone()方法不一定很容易,而且在进行比较深层次的复制的时候也需要编写一定工作量的代码 原型模式的实际应用简介:
原型对象一般在适用于一下场景:
在创建对象的时候,我们不仅希望被创建的对象继承其类的基本机构,而且还希望继承原型对象的数据。
希望对目标对象的修改不影响既有的原型对象(深度克隆的时候可以完全互不影响)。 隐藏克隆操作的细节。很多时候,对对象本身的克隆需要涉及到类本身的数据细节。
温馨提示:
因为使用原型模式的时候每个类都要具备克隆方法。如果在类的设计之初没有很好的规划,等使用很久了才想到克隆,就可能非常的麻烦,尤其是在设计到深层次复制的时候,因为此时牵扯到很多因素,而且工作量非常大。
在给女朋友复制肉麻情话的之前必须充分检查,做适当的修改,别搞的发过去的情话中有参见某某具体网址的情况出现,否则的话,你就死定了O(∩_∩)O哈!
正在阅读:
抗击新型肺炎疫情个人心得体会精选范文集锦08-03
三级网络考前密卷选择题1-48004-28
18课漫步中外建筑艺术08-06
《Mckinsey——战略咨询培训手册》06-03
开展国际博物馆日活动总结多篇04-25
电缆密封接头种类05-10
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 设计模式
- 原型
- 大话
- Android
- 模式
- 邓小平同志在对越自卫反击战情况报告上的讲话
- 一年级语文上学期生字扩词的归纳与整理(上海二期课改教材)
- 运筹学 各章习题
- 线性规划中的整点问题求解方法
- 园林绿化保洁部仓库管理员工作规定标准范本
- 磁山机械厂小学数学校本教研活动
- 化工计算常用公式与数据
- 污水厂臭氧脱色实验研究报告
- 使用Excel 2003制作电子表格
- 世界现代史参考书目与思考题
- 企业怎么做营销型网站建设?
- 户外经济学之消费者篇
- 2007年浙江龙泉市七年级下学期质量抽查数学试卷
- 2012年云南省公务员考试招考简章 职位表下载(非法检系统)
- 猪场免疫程序、卫生防疫、消毒制度
- 桥梁高墩滑模施工技术
- 垃圾处理场渗滤液工程施工组织设计
- 学习e家课堂游戏
- 2015年广西数学高考考纲学习心得
- 温胆汤加减治疗非酒精性脂肪肝疗效观察