Android_原型模式_项目应用
来源:互联网 发布:oc js调用支付宝app 编辑:程序博客网 时间:2024/05/21 14:43
引入概念:
原型模式:实例通过copy创建新的对象,有浅copy和深copy.
项目中,由于menu中的对象,被popupwindow引用,popupwindow的点击事件又会对,对象属性进行修改,
解决办法就是,创建临时的新对象给 popupwindow用,
于是产生了下面很不优雅的代码,
NavMenuDetailEntity temp = new NavMenuDetailEntity(); temp.setNavMenuDetailTitle(forGetUI.getNavMenuDetailTitle()); temp.setNavMenuDetailDesc(forGetUI.getNavMenuDetailDesc()); temp.setNavMenuDetailList(forGetUI.getNavMenuDetailList()); temp.setNavMenuDetailIcon(forGetUI.getNavMenuDetailIcon()); temp.setNavMenuDetailColor(forGetUI.getNavMenuDetailColor()); temp.setNavMenuDetaType(forGetUI.getNavMenuDetaType());
这样写确实可以,clone出来一个一样属性的对象,但是那一堆get xx
set xx 也太不软件工程了,感谢群里木木,nil 武汉的建议 原型模式的应用不就自然的解决这种对象的clone问题了.
于是我们开始着手打造第一个原型模式的entity 在Android项目中的使用,虽然很简单
- 我们的entity实现了,Cloneable 从写 clone方法,
这里直接上代码` @Override
public NavMenuDetailEntity clone() {
try {
NavMenuDetailEntity cloneEntity = (NavMenuDetailEntity) super.clone();
cloneEntity.navMenuDetailTitle = this.navMenuDetailTitle;
cloneEntity.navMenuDetailDesc = this.navMenuDetailDesc;
cloneEntity.navMenuDetailIcon = this.navMenuDetailIcon;
cloneEntity.navMenuDetailColor = this.navMenuDetailColor;
cloneEntity.navMenuDetaType = this.navMenuDetaType;// if property is object,so need deep copy cloneEntity.navMenuDetailList = (ArrayList<String>) this.navMenuDetailList.clone(); return cloneEntity;} catch (CloneNotSupportedException e) { e.printStackTrace(); return null;}
}
3.我们在activity中的使用变的很简单了,不见了那些 get set
而变成,
NavMenuDetailEntity temp = forGetUI.clone();`
一句话就能克隆出来一个 属性值完全一样的新对象
而且不见了那种修改temp 改变原始对象值的问题,
java的基础知识,内存中,对象指针的引用,
所以我们避免写出这样的克隆代码
/** * 创建的新对象在内存中,指针指向了 原型,所以后续修改tempX * 原型的forgetUI都会变.. */ NavMenuDetailEntity tempX= forGetUI;
如图所示,
当修改了temp的title为 ktv的时候,原型的title也跟着变了.
所以原型模式无非是解决克隆对象的不二之选,
最后上一张预览GIF,等demo完毕后就开源,
- Android_原型模式_项目应用
- 设计模式_原型模式
- 设计模式_原型模式
- 设计模式_原型模式
- 设计模式_原型模式
- 设计模式_原型模式
- 大话设计模式_原型模式
- 设计模式06_原型模式
- 设计模式03_原型模式
- java设计模式_原型模式
- 设计模式_原型模式(7)
- Java设计模式_创建模式_原型模式
- Java设计模式_(创建型)_原型模式
- 移动架构07_原型模式
- Android设计模式应用---原型模式
- Android_聊天_表情
- 设计模式学习笔记_原型模式(prototype)
- 【GOF23设计模式】_原型模式JAVA233-234
- 知乎 哪些素质很重要,却是读书学不来的?-2
- K-Nearest Neighbor Classifier (邻近算法)
- 数据库连接串的配置
- 16进制转换(文字)Demo
- java gbk转utf-8
- Android_原型模式_项目应用
- SAP ABAP编程 Table Control动态隐藏列
- Storm实战之TopN
- 升级Xcode之后VVDocumenter-Xcode不能用的解决办法
- 送给还在面试的程序猿
- JAVA逻辑--用JAVA代码打印菱形
- Mysql数据库字段中去除回车和换行符
- 打造Android数据绑定暂时基于AbsListView的派生类(ListView和GridView)
- dm81xx link内存分配及link之间数据传递