java设计模式之原型模式

 

一 简介

      用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。

二 实例代码

  1. 需求

    完成简历的复制。

  2. 代码实现

简历类:被copy的类,需要实现Cloneable接口

package com.ct.prototype;

public class Resume implements Cloneable {

    private String name;
    private String age;
    private String sex;
    private WorkExperience workExperience;

    public Resume() {

    }
    //私有构造方法用于调用WorkExperience中的值,进行深度clone
    private Resume(WorkExperience workExperience) {
        this.workExperience = (WorkExperience) workExperience.clone();
    }

    public WorkExperience getWorkExperience() {
        return workExperience;
    }

    public void setWorkExperience(WorkExperience workExperience) {
        this.workExperience = workExperience;
    }

    public String getName() {
        return name;
    }

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

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Object clone(){
        Resume obj = new Resume(this.workExperience);
        try {
            obj = (Resume) super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return obj;
    }

    public void display() {
        System.out.println(this.name + "  " + this.sex + "  " + this.age);
        System.out.println(this.workExperience.getCompanyName() + "  " + this.workExperience.getWorkDate() + "  " + this.workExperience.getRemark());
    }
}

工作经历类:

public class WorkExperience implements Cloneable {
    private String workDate;
    private String remark;
    private String companyName;

    public String getCompanyName() {
        return companyName;
    }

    public void setCompanyName(String companyName) {
        this.companyName = companyName;
    }

    public String getWorkDate() {
        return workDate;
    }

    public void setWorkDate(String workDate) {
        this.workDate = workDate;
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }

    public Object clone(){
        Object obj = null;
        try {
            obj =  super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return obj;
    }
}

测试类:

package com.ct.prototype;

public class Test {

    public static void main(String[] args) {
        Resume resume = new Resume();
        resume.setName("chentao");
        resume.setAge("23");
        resume.setSex("男");
        WorkExperience work = new WorkExperience();
        work.setCompanyName("阿里巴巴");
        work.setWorkDate("2001-2008");
        work.setRemark("加班多,工资高");
        resume.setWorkExperience(work);
        resume.display();

        Resume resume1 = (Resume) resume.clone();
        resume1.setName("wangwu");
        resume1.getWorkExperience().setWorkDate("2008-2018");
        resume1.getWorkExperience().setCompanyName("腾讯");
        resume1.display();

        Resume resume2 = (Resume) resume.clone();
        resume2.setAge("24");
        resume1.getWorkExperience().setWorkDate("2010-2017");
        resume2.getWorkExperience().setCompanyName("京东");
        resume2.display();
    }
}

       原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。避免了重新创建对象的资源浪费,也使得赋值变得更加简略。

 

微信扫一扫
关注该公众号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值