IT行业,一直讲一句话,拼到最后都拼的是“内功”,而内功往往就是指我们处理问题的思路、经验、想法,而对于开发者来说,甚至对于产品也一样,都离不开一个“宝典”,就是设计模式。今天我们一起借助Android源码去探索一下原型模式的优缺点,以及它所想要去解决的问题。同时结合我工作经验中的一个小例子,来总结实践一下。

1.背景&定义

理解:
原型模式是创新型设计模式的一种。我们先从字面理解一下,“原型”这个词,一般是相对存在的,说明存在它的复制体或者克隆体存在。那么这时有了一个问题,为什么要去克隆一个对象呢?既然有原型存在,那说明这个对象是可以通过new创建的,为什么我还要去复制呢?这也就是原型模式存在的真正意义了。

往往我们需要复制的对象,它的创建过程复杂 or 创建耗时,所以这时直接去复制,肯定是性能最好的一种方式。

定义:
原型模式用于创建重复的对象,通过拷贝这些原型创建新的对象。

2.UML类图设计

角色:

Client: 客户端用户

Prototype: 抽象的原型接口或者类

ConcreateProotype: 原型对象

Android源码设计模式探索与实战【原型模式】相关推荐

  1. Android源码设计模式探索与实战【建造者模式】

    IT行业,一直讲一句话,拼到最后都拼的是"内功",而内功往往就是指我们处理问题的思路.经验.想法,而对于开发者来说,甚至对于产品也一样,都离不开一个"宝典",就 ...

  2. Android源码设计模式探索与实战【外观模式】

    IT行业,一直讲一句话,拼到最后都拼的是"内功",而内功往往就是指我们处理问题的思路.经验.想法,而对于开发者来说,甚至对于产品也一样,都离不开一个"宝典",就 ...

  3. 《Android源码设计模式解析与实战》读书笔记(十三)

    第十三章.备忘录模式 备忘录模式是一种行为模式,该模式用于保存对象当前的状态,并且在之后可以再次恢复到此状态,有点像是我们平常说的"后悔药". 1.定义 在不破坏封闭的前提下,捕获 ...

  4. 《Android源码设计模式解析与实战》读书笔记(十七)

    第十七章.中介者模式 中介者模式也称为调解者模式或调停者模式,是一种行为型模式. 1.定义 中介者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显作用.从而使它们可以松散耦合.当某些对象之 ...

  5. 《Android源码设计模式解析与实战》读书笔记(十二)

    第十二章.观察者模式 观察者模式是一个使用率非常高的模式,它最常用在GUI系统.订阅–发布系统.因为这个模式的一个重要作用就是解耦,将被观察者和观察者解耦,使得它们之间的依赖性更小,甚至做到毫无依赖. ...

  6. 《Android源码设计模式解析与实战》读书笔记(十四)

    第十四章.迭代器模式 迭代器模式,又叫做游标模式,是行为型设计模式之一.我们知道对容器对象的访问必然会涉及遍历算法,我们可以将遍历的方法封装在容器中,或者不提供遍历方法,让使用容器的人自己去实现去吧. ...

  7. 《Android源码设计模式解析与实战》读书笔记(二十四)

    第二十四章.桥接模式 桥接模式也称为桥梁模式,是结构型设计模式之一.桥接模式中体现了"单一职责原则"."开闭原则"."里氏替换原则".&qu ...

  8. 《Android源码设计模式解析与实战》读书笔记(二十一)

    第二十一章.装饰模式 装饰模式也称为包装模式,是结构型设计模式之一.装饰模式是一种用于替代继承技术的一种方案. 1.定义 动态的给一个对象添加一些额外的职责.就增加功能来说,装饰模式相比生成子类更为灵 ...

  9. 《Android源码设计模式解析与实战》读书笔记(十一)

    第十一章.命令模式 命令模式是行为型模式之一.总体来说并不难理解,只是比较繁琐,他会将简单的调用关系解耦成多个部分,增加类的复杂度,但是即便如此,命令模式的结构依然清晰. 1.定义 将一个请求封装成一 ...

最新文章

  1. GitLab 配置邮箱
  2. angular学习笔记(四)- input元素的ng-model属性
  3. 读债务危机0812:接管房利美和房地美
  4. 【转】[C++]LARGE_INTEGER 类型使用
  5. PHP中的预定义常量和魔术常量
  6. java中如何检查字符串都是数字_如何在Java中检查字符串是否为数字?
  7. python:SyntaxError: invalid syntax报错
  8. 安装了pygame、但是在python无法导入_详解有关PyCharm安装库失败的问题的解决方法...
  9. 以太坊web3.js文档翻译及说明
  10. 为什么有人宁愿每年买一部千元机,也不愿一次买部高端机?
  11. power bi可视化表_在Power BI报表视图中创建可视化
  12. ext.net 开发学习——回车事件(六)
  13. Laravel响应宏原理
  14. 190228每日一句
  15. 【人脸识别】基于matlab GUI PCA算法人脸识别门禁系统【含Matlab源码 1777期】
  16. 损失 18 万,获刑 7 年,又又又是程序员删库!
  17. android+刷机文件,【技术】刷机脚本文件的修改
  18. 星际争霸2中一些你不曾注意到的搞笑细节
  19. PHP解析SOAP生成的xml
  20. 部署scrapy爬虫到AWS Ubuntu 18.04,用crontab定时执行

热门文章

  1. mysql相关知识(全)
  2. 电容屏/电阻屏Android虚拟按键实现的两种方法
  3. c++正则表达式 日期格式匹配
  4. 腾讯QQ、淘宝旺旺、微软MSN、谷歌Gtalk 在线客服代码
  5. 回飞锅有哪些功能_很多人问BK回飞锅怎么保养?现在放上一些自己的心得
  6. Unity2D入门1 简单角色移动与动画 基础
  7. 文章结构精细化解读之深度剖析
  8. SolidWorks 2008机械设计一册通
  9. 周末的一点心得和总结(Latex技巧,多巴胺和韦伯-费希纳定律还有微商)
  10. IDEA+Java+SSH+Bootstrap+Mysql实现在线考试系统(含论文)