设计模式(6)原型模式

这篇具有很好参考价值的文章主要介绍了设计模式(6)原型模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、介绍

Java中自带的原型模式是clone()方法。该方法是Object的方法,native类型。他的作用就是将对象的在内存的那一块内存数据一字不差地再复制一个。我们写简单类的时候只需要实现Cloneable接口,然后调用Object::clone方法就可实现克隆功能。这样实现的方式是浅拷贝。

设计模式(6)原型模式,设计,设计模式,原型模式

 1、深复制与浅复制:

(1)浅复制:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象;

//原型类
public class Resume implements Cloneable,Serializable{
    private static final long serialVersionUID = 1L;
 
    private String name;
    private String sex;
    private String age;
 
    Resume(String name,String sex,String age){
        this.name=name;
        this.sex=sex;
        this.age=age;
    }
 
    /**
     * 设置个人信息
     * @param sex
     * @param age
     */
    public void setPersonInfo(String sex,String age){
        this.sex=sex;
        this.age=age;
    }
 
    //描述
    public void dispaly(){
        System.out.println("姓名:"+name+"\t年龄:"+age+"\t性别:"+sex);
    }
 
    public Object clone(){
        try {
            Resume resume = (Resume)super.clone();
            return resume;
        }catch (Exception e){
            return null;
        }
 
    }
 
}

  客户端:

public class MainTest {
    public static void main(String[] args){
 
        Resume resume = new Resume("大鸟","男","25");
 
        Resume resume2 = (Resume)resume.clone();
        resume2.setPersonInfo("男","26");
 
        resume.dispaly();
        resume2.dispaly();
 
    }
}

 (2)深复制:把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象。

      新增对象类

public class WorkExperience implements Cloneable{
 
    private String workDate;
    private String company;
 
    public WorkExperience(String workDate,String company){
        this.workDate=workDate;
        this.company=company;
    }
 
    public WorkExperience(){}
 
    /**省略set、get方法*/
 
 
    public Object clone(){
        try {
            return super.clone();
        }catch (Exception e){
            return null;
        }
 
    }
 
}
public class Resume implements Cloneable,Serializable{
    private static final long serialVersionUID = 1L;
 
    private String name;
    private String sex;
    private String age;
    private WorkExperience workExperience;
 
    Resume(String name,String sex,String age){
        this.name=name;
        this.sex=sex;
        this.age=age;
        this.workExperience=new WorkExperience();
    }
 
    /**
     * 添加私有构造 克隆工作经历
     * @param workExperience
     */
    private Resume(WorkExperience workExperience){
        this.workExperience= (WorkExperience) workExperience.clone();
    }
 
    /**
     * 设置个人信息
     * @param sex
     * @param age
     */
    public void setPersonInfo(String sex,String age){
        this.sex=sex;
        this.age=age;
    }
 
    /**
     * 设置工作经历
     * @param workDate
     * @param company
     */
    public void setWorkExperience(String workDate, String company){
        this.workExperience.setWorkDate(workDate);
        this.workExperience.setCompany(company);
    }
 
    //描述
    public void dispaly(){
        System.out.println("姓名:"+name+"\t年龄:"+age+"\t性别:"+sex);
        System.out.println("工作经历:"+workExperience.getWorkDate()+"\t"+workExperience.getCompany());
    }
 
    /**
     * 重写了克隆方法
     * @return
     */
    public Object clone(){
        try {
            Resume resume = new Resume(this.workExperience);//调用私有构造器实现工作经历克隆
            //给对象属性重新赋值--最终返回的是深复制的resume对象
            resume.name=this.name;
            resume.sex=this.sex;
            resume.age=this.age;
            return resume;
        }catch (Exception e){
            return null;
        }
 
    }
 
}

 客户端

public class MainTest {
    public static void main(String[] args){
 
        Resume resume = new Resume("大鸟","男","25");
        resume.setWorkExperience("2015-2016","南京工作");
 
        Resume resume2 = (Resume)resume.clone();
        resume2.setPersonInfo("男","26");
        resume2.setWorkExperience("2016-2018","上海工作");
 
        resume.dispaly();
        resume2.dispaly();
 
    }
}

二、应用:

1、数据集对象DataSet,有Clone()方法和Copy()方法,Clone用于复制结构而不复制数据,实现了原型模式的浅复制;Copy不但复制结构也复制数据,实现了原型模式的深复制。文章来源地址https://www.toymoban.com/news/detail-651311.html

到了这里,关于设计模式(6)原型模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 设计模式(6)原型模式

    设计模式(6)原型模式

    一、介绍 Java中自带的原型模式是clone()方法。该方法是Object的方法,native类型。他的作用就是将对象的在内存的那一块内存数据一字不差地再复制一个。我们写简单类的时候只需要实现Cloneable接口,然后调用Object::clone方法就可实现克隆功能。这样实现的方式是浅拷贝。  1、

    2024年02月12日
    浏览(9)
  • 【设计模式】原型模式

    【设计模式】原型模式

    原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式之一。 这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例

    2024年02月13日
    浏览(9)
  • 设计模式——原型模式

            原型模式就是有时我们需要多个类的实例,但是一个个创建,然后初始化,这样太麻烦了,此时可以使用克隆,来创建出克隆对象,就能大大的提高效率。具体就是要让此类实现Cloneable接口,然后重写Object类中的clone()方法。         具体实现就是克隆了,前面都有

    2024年02月14日
    浏览(12)
  • 重温设计模式 --- 原型模式

    原型模式 是一种创建型设计模式,它允许我们创建一个对象的副本,而不需要显式地使用构造函数来创建一个新的对象。这种模式通常用于创建那些具有复杂创建过程或需要大量资源的对象。 在原型模式中,我们首先定义一个原型接口,该接口包含一个克隆方法。然后我们

    2024年02月13日
    浏览(9)
  • 设计模式5:原型模式

    Prototype Pattern 如果对象的创建成本比较大,可以基于已有的原型对象通过来创建新的对象,节省创建时间。 设计模式之原型模式 实现Cloneable接口的方式。这里就不展开分析浅克隆和深克隆了,后面再专门分析浅克隆和深克隆,不影响对原型模式的理解。 用序列化实现创建对

    2024年02月11日
    浏览(11)
  • 设计模式三(原型模式)

    在开发过程中,创建多个数据相同的对象,每次new都开销比较大,在这里可以使用对象克隆,以先创建的原型对象为模板进行对象的复制。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象

    2024年01月25日
    浏览(13)
  • 设计模式-原型模式

    设计模式-原型模式

    目录 一、传统方式 二、原型模式  三、浅拷贝和深拷贝 克隆羊问题: 现在有一只羊tom,姓名为: tom,年龄为: 1,颜色为: 白色,请编写程序创建和tom羊属性完全相同的10只羊。 传统的方式的优缺点: 简单易操作。优点是比较好理解。 在创建新的对象时,总是需要重新获取原

    2024年02月16日
    浏览(12)
  • 设计模式之原型模式详解

    设计模式之原型模式详解

    在设计模式的系列文章中,我们前面已经写了 工厂模式 、 单列模式 、 建造者模式 ,在针对创建型模式中,今天想跟大家分享的是 原型模式 ,我觉的这种模式叫克隆模式会更佳恰当。原型模式的目的就是通过复制一个现有的对象来生成一个新的对象。 原型模式 使用原型实

    2024年02月12日
    浏览(11)
  • js设计模式:原型模式

    js设计模式:原型模式

    使用js特有的原型链机制,可以通过Object.create方法创建新对象,将一个对象作为另外一个对象的原型 也可以通过修改原型链上的属性,影响新对象的行为 可以更方便的创建一些对象

    2024年02月21日
    浏览(10)
  • Java设计模式-原型模式

    原型模式是一种创建型设计模式,它允许在运行时通过复制现有对象来创建新对象,而不是通过构造函数创建。这个模式的核心思想是基于一个现有的对象克隆一个新的对象,这个过程对外部世界是透明的,就像对象从未被克隆过一样。 原型模式的一个关键优点是可以避免在

    2024年02月03日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包