Android_原型模式_项目应用

引入概念:
原型模式:实例通过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项目中的使用,虽然很简单

  1. 我们的entity实现了,Cloneable 从写 clone方法,
  2. 这里直接上代码` @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
    而变成,
    // deep clone
    NavMenuDetailEntity temp = forGetUI.clone();`
    一句话就能克隆出来一个 属性值完全一样的新对象
    而且不见了那种修改temp 改变原始对象值的问题,
    java的基础知识,内存中,对象指针的引用,

所以我们避免写出这样的克隆代码

 /**
                                                                     * 创建的新对象在内存中,指针指向了 原型,所以后续修改tempX
                     * 原型的forgetUI都会变..
                     */
                    NavMenuDetailEntity tempX= forGetUI;

如图所示,这里写图片描述

当修改了temp的title为 ktv的时候,原型的title也跟着变了.

所以原型模式无非是解决克隆对象的不二之选,

最后上一张预览GIF,等demo完毕后就开源,

地图demo预览

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值