前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大话设计模式笔记(六)——原型模式

大话设计模式笔记(六)——原型模式

作者头像
逝兮诚
发布2019-10-30 21:25:00
3760
发布2019-10-30 21:25:00
举报
文章被收录于专栏:代码人生代码人生

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/luo4105/article/details/76549439

第九章原型模式

在面向对象语言中,解决复制对象而不是复制引用的问题的解决方法是原型模式。

原型模式的UML图

Java中,原型接口是存在的,是Copyable。Clone方法是Object的clone(),不过是protected,使用super.clone()时,必须实现Copyable接口。不然会抛出CloneNotSupportedException异常

例子,原型模式实现深复制:

现有简历类,简历中有工作经历类,通过原型模式实现简历类的复制。

UML图

简历类

代码语言:javascript
复制
public class Resume implements Cloneable{
    private int id;
    private String name;
    private int age;
    private String sex;
    private WorkExperience workExperience;

    public Resume(Stringname) {
        this.name = name;
        workExperience = new WorkExperience();
    }

    /** getter、setter */

    public void setWorkExperience(StringcomanyName, double workTime) {
        this.workExperience.setCompanyName(comanyName);
        this.workExperience.setWorkTime(workTime);
    }

    public Objectclone() {
        try {
            Resume user = (Resume) super.clone();
            user.workExperience= (WorkExperience) workExperience.clone();
            return user;
        } catch(CloneNotSupportedException e) {
            e.printStackTrace();
            return null;
        }
    }

}

工作经验类

代码语言:javascript
复制
public class WorkExperience implements Cloneable{
    private StringcompanyName;
    private double workTime;

    /** getter、setter */

    public Objectclone() {
        try {
            return (WorkExperience)super.clone();
        } catch(CloneNotSupportedException e) {
            e.printStackTrace();
            return null;
        }
    }
}

client类

代码语言:javascript
复制
public class Client {
    public static void main(String[]args) {
        Resume zhangsan = new Resume("张三");
        zhangsan.setId(1);
        zhangsan.setAge(19);
        zhangsan.setWorkExperience("XXXX有限公司", 4);

        Resume lisi = (Resume) zhangsan.clone();
        lisi.setName("李四");
        lisi.setWorkExperience("腾讯", 1);

        System.out.println(zhangsan.getName() + "," + zhangsan.getAge() + "," + zhangsan.getWorkExperience().getCompanyName() + "/0" + zhangsan.getWorkExperience().getWorkTime());
        System.out.println(lisi.getName() + "," + lisi.getAge() + "," + lisi.getWorkExperience().getCompanyName() + "/0" + lisi.getWorkExperience().getWorkTime());
    }
}

总结

原型模式是的作用是用来复制对象的。原型模式赋值时不考虑构造细节,所以它比构造效率高。

原始模式的复制涉及深复制和浅复制。浅复制是只复制对象中的基本数据类型,而引用类型只复制引用,实际指向同一个对象。深复制是复制对象中的所有属性。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-08-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第九章原型模式
    • 总结
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档