设计模式之原型模式

来源:互联网 发布:编程之美 mobi 编辑:程序博客网 时间:2024/05/16 01:30

前言:

原型模式(Prototype Pattern)是用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

一.原型模式简介:

原型模式就是通过一个对象来创建对象,隐藏了创建细节。

模型模式主要应用的是对象的深复制,即对象的克隆。如果不了解,请先学习深复制和浅复制,点击查看。

二.原型模式的实现:

案例:招聘网站的简历中心可以通过一份简历创建另一份简历,新简历会自动填入个人基本信息。

1.UML模型图:
这里写图片描述

2.模型类(简历类)

此类为一个标准的JavaBean类,只不过在此基础上实现了Cloneable接口,并实现clone()方法,用来深复制简历。

package com.pattern.prototype;//简历类(模型类)public class Resume implements Cloneable {    private String name;    private String age;    private String sex;    private String company;    private String workTime;    public Resume(String name) {        super();        this.name = name;    }    public String getSex() {        return sex;    }    public void setSex(String sex) {        this.sex = sex;    }    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 getCompany() {        return company;    }    public void setCompany(String company) {        this.company = company;    }    public String getWorkTime() {        return workTime;    }    public void setWorkTime(String workTime) {        this.workTime = workTime;    }    //设置个人信息    public void setPersonalInfo(String age, String sex) {        this.age = age;        this.sex = sex;    }    //设置工作经验    public void setWorkExperence(String workTime, String company) {        this.workTime = workTime;        this.company = company;    }    //简历预览    public void show() {        System.out.println("姓名:"+name+",性别:"+sex+",年龄:+age+",工龄:"+workTime+",所在公司:"+company);    }    // 实现克隆方法,用于对象克隆    @Override    public Object clone() throws CloneNotSupportedException {        Resume resume = null;        try {            resume = (Resume) super.clone();        } catch (Exception e) {            e.printStackTrace();        }        return resume;    }}

3.客户端类

在客户端中,通过firstResume创建出secondResume、thirdResume这两个对象,而不是通过new,减少了通过new创建对象时,初始化构造函数时间消耗,提高效率。

模型模式还隐藏了对象创建的具体细节,提高性能。

package com.pattern.prototype.client;import com.pattern.prototype.Resume;public class Client {    public static void main(String[] args) {        try {            Resume firstResume = new Resume("程猿");            firstResume.setPersonalInfo("25", "男");            firstResume.setWorkExperence("2014-2017", "特斯拉");            Resume secondResume = (Resume) firstResume.clone();            Resume thirdResume = (Resume) firstResume.clone();            thirdResume.setWorkExperence("2014-2018", "皮克斯");            firstResume.show();            secondResume.show();            thirdResume.show();        } catch (CloneNotSupportedException e) {            e.printStackTrace();        }    }}

运行结果:

姓名:程猿,性别:男,年龄:25,工龄:2014-2017,所在公司:特斯拉姓名:程猿,性别:男,年龄:25,工龄:2014-2017,所在公司:特斯拉姓名:程猿,性别:男,年龄:25,工龄:2014-2018,所在公司:皮克斯

通过结果可以看出,我们修改了thirdResume对象(第三份简历),但不会对其他简历(对象firstResume和secondResume)造成影响。通过第一份填写好的简历模板,快速创建多份简历,各个简历之间互不影响,这就是原型模式的常用的应用。

原型模式也经常应用在对数据集的克隆和定制,如新闻客户端导航栏目的定制等。

总结:

  1. 模板模式主要利用了克隆对象(深复制)的方式创建对象,既隐藏创建对象的过程,又节省了资源消耗。
  2. 模板模式不用重新初始化对象,而是动态的获得对象运行时的状态。
原创粉丝点击