文档章节

原型模式

跨界王子
 跨界王子
发布于 2017/05/19 14:20
字数 236
阅读 4
收藏 0

原型模式就是用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。

package prototype;

public class Employee implements Cloneable {
    private String name;
    private Company company;

    public Employee(String name, String company) {
        this.name = name;
        this.company = new Company(company);
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setCompany(String company) {
        this.company = new Company(company);
    }

    /**
     * 工作
     */
    public void work() {
        System.out.println(name + " works at " + this.company.name);
    }

    @Override
    protected Employee clone() throws CloneNotSupportedException {
        return (Employee) super.clone();
    }

    //公司
    class Company {
        private String name;

        public Company(String name) {
            this.name = name;
        }
    }
}
package prototype;

public class PrototypeClient {
    public static void main(String[] args) throws CloneNotSupportedException {
        String name = "sam";
        String company = "apple";
        Employee sam = new Employee(name, company);
        sam.work();

        String otherName = "james";
        String otherNcompany = "google";
        Employee james = sam.clone();
        james.setName(otherName);
        james.setCompany(otherNcompany);
        james.work();
    }
}

如果对象中有其他对象的引用,使用浅拷贝无法完成对象的整个克隆,因为如果使用浅拷贝,只是对象的引用得到的拷贝,而两个引用是指向了同一个对象,对其中一个修改还是会影响到另外一个对象。

© 著作权归作者所有

共有 人打赏支持
上一篇: 模板模式
下一篇: 模板模式
跨界王子
粉丝 0
博文 2
码字总数 530
作品 0
沈阳
私信 提问

暂无文章

OSChina 周二乱弹 —— 以后我偷小鱼干养你

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @庞巴哥 :只有这节奏瞬间变得轻松。。。。。。。。。分享Talking Eyes的单曲《In the sun (Extended Version)》: 《In the sun (Extended Ve...

小小编辑
8分钟前
0
0
多表查询

第1章 多表关系实战 1.1 实战1:省和市  方案1:多张表,一对多  方案2:一张表,自关联一对多 1.2 实战2:用户和角色 (比如演员和扮演人物)  多对多关系 1.3 实战3:角色和权限 (比如...

stars永恒
今天
7
0
求推广,德邦快递坑人!!!!

完全没想好怎么来吐槽自己这次苦逼的德邦物流过程了,只好来记一个流水账。 从寄快递开始: 2019年1月15日从 德邦物流 微信小app上下单,截图如下: 可笑的是什么,我预约的是17号上门收件,...

o0无忧亦无怖
昨天
7
0
Mac Vim配置

1.升级 vim   我自己 MacBook Pro 的系统还是 10.11 ,其自带的 vim 版本为 7.3 ,我们将其升至最新版: 使用 homebrew : brew install vim --with-lua --with-override-system-vim 这将下...

Pasenger
昨天
8
0
vmware安装Ubuntu上不了网?上网了安装不了net-tools,无法执行ifconfig?

1.重新设置网络适配器还是不行,如下指定nat 2.还需要指定共享网络,我是在无线环境下 3.无法执行ifconfig https://packages.ubuntu.com/bionic/net-tools到这个网站下载net-tools的deb文件...

noob_chr
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部