设计模式:原型模式

 在程序设计中,经常会遇见,首先创建出来一个实例,但是基于各种原因,可能会创建一个相同的实例,在新创建的实例中做相关的功能,此时就需要作出拷贝,原始方法是使用new,然后在进行赋值。

举例:

在游戏开发中,武将Hero 是在玩家身上,界面中需要展示出他的属性,比如血量,能量值之类的东西;

玩家对打的时候,会满血进入战斗,战斗中会有血量的消耗, 能量值的变动,如果只直接使用玩家身上的hero,不做其他操作直接进入战斗,由于java是引用传递(基本数据类型+String是按值传递),战斗中血量的减少势必会影响玩家展示界面的血量展示,就必须重新new一个相同的hero进行战斗。如果在每个战斗开始处都使用new去创建界面,代码会显得很复杂,而且难以控制,也不灵活。此时原型模式就起作用了,他的原理就是对象的克隆,在对象内部创建一个clone()的方法,然后需要赋值的时候直接是A a = A.clone();将已有的对象赋值一份,满足需要的结果。

public class Hero {
    String hid;
    String pid;
    String hName;
    int hLv;

    public Hero clone() {
        Hero h = new Hero();
        h.setHid(hid);
        h.sethLv(hLv);
        h.setPid(pid);
        return h;
    }

    public String getHid() {
        return hid;
    }

    public void setHid(String hid) {
        this.hid = hid;
    }

    public String getPid() {
        return pid;
    }

    public void setPid(String pid) {
        this.pid = pid;
    }
}

需要创建相同的复制实例的时候:

public class ProtoTypeTest {
    public static void main(String[] args) {
        Hero h = new Hero();
        //需要创建一样的hero
        Hero newHero = h.clone();
    }
}

在java设计语言中,接口Cloneable 也可以作为对象的克隆使用,但是其中需要考虑clone是浅拷贝还是深拷贝;

浅拷贝:拷贝基础字段和string值,比如int,boolean,double,string 之类;

深拷贝:是在浅拷贝的基础上,递归拷贝对象中涉及的引用部分;

转载于:https://my.oschina.net/u/3300098/blog/1589476

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值