设计模式之原型模式
来源:互联网 发布:编程之美 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 0
- 设计模式之原型
- 设计模式之原型
- 设计模式 之 原型
- 设计模式之原型
- 设计模式之原型
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之-原型模式
- 设计模式之 原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之--原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- Android RecyClerView 设置间隔
- 指针与引用
- MySQL 系列(四)主从复制、备份恢复方案生产环境实战
- PAT B1064. 朋友数
- 宝岛地图 (51Nod-1572)
- 设计模式之原型模式
- LightOJ
- 统计学与工具实现(三)
- Android_共享数据区 资源访问
- 将PDF论文转换成Word格式
- 自动化的DNS域名解析切换功能在网站服务高可用设计中的实践
- Freescales i.mx6配置IOMUX
- Java中的判断与循环
- Java反射(二):Class的动态加载