《大话设计模式》--原型模式

题目:编写简历,复制三份,做相应的修改

以下为深层复制

复制代码
public class WorkExperience implements Cloneable {
    private String timeArea;
    private String company;

    public String getTimeArea() {
        return timeArea;
    }

    public void setTimeArea(String timeArea) {
        this.timeArea = timeArea;
    }

    public String getCompany() {
        return company;
    }

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

    @Override
    protected Object clone() {
        Object o = null;
        try {
            o = super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return o;
    }
}
复制代码

 

复制代码
public class Resume implements Cloneable {
    private String name;
    private String sex;
    private String age;
    private WorkExperience work;

    public Resume(String name) {
        this.name = name;
        work = new WorkExperience();
    }

    private Resume(WorkExperience work) {
        this.work = (WorkExperience) work.clone();
    }

    public void setPersonalInfo(String sex, String age) {
        this.sex = sex;
        this.age = age;
    }

    public void setWorkExperience(String timeArea, String company) {
        work.setTimeArea(timeArea);
        work.setCompany(company);
    }

    public void display() {
        System.out.println(name + "," + sex + "," + age);
        System.out.println("工作经历:" + work.getTimeArea() + "," + work.getCompany());
    }

    @Override
    protected Object clone() {
        Resume obj = new Resume(this.work);
        obj.name = this.name;
        obj.sex = this.sex;
        obj.age = this.age;
        return obj;
    }
}
复制代码
复制代码
public class Test {
    public static void main(String args[]) {
        Resume a = new Resume("小王");
        a.setPersonalInfo("男", "29");
        a.setWorkExperience("1999-2004", "XX公司");

        Resume b = (Resume) a.clone();
        b.setPersonalInfo("男", "25");

        Resume c = (Resume) a.clone();
        c.setWorkExperience("1995-2003", "YY公司");

        a.display();
        b.display();
        c.display();
    }
}
复制代码

 

打印结果

小王,男,29
工作经历:1999-2004,XX公司
小王,男,25
工作经历:1999-2004,XX公司
小王,男,29
工作经历:1995-2003,YY公司

 

一般在初始化的信息不发生改变的情况下,克隆是最好的方法。这既隐藏了对象创建的细节,又对性能是大大的提高。

posted @   嘉禾世兴  阅读(108)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示