• 模式简介
  • UML
  • 源码下载
  • 题目
  • 代码
  • 运行结果
  • 模式说明
  • C写法

模式简介

Specify the kinds of objects to create using a prototypical instance,and create new objects by copying this prototype.

用原型示例指定创建对象的种类,并且通过复制这些原型创建新的对象。

UML

源码下载

GitHub:https://github.com/YEN-GitHub/PatternDemo/tree/master/src/CreationalPattern/prototype

题目

王小华群发邮件通知同学参加讲座

代码

package CreationalPattern.prototype.demo1;/*** Created by yangenneng on 2017-05-31 11:20* Abstract:邮件类* 必须要实现clone方法*/
public class Mail implements Cloneable {private String receiver;//收件人private String subject;//邮件标题private String context;//邮件内容private String tail;   //邮件尾部public String getReceiver() {return receiver;}public void setReceiver(String receiver) {this.receiver = receiver;}public String getSubject() {return subject;}public void setSubject(String subject) {this.subject = subject;}public String getContext() {return context;}public void setContext(String context) {this.context = context;}public String getTail() {return tail;}public void setTail(String tail) {this.tail = tail;}public Mail(String subject, String context){this.subject=subject;this.context=context;}public Mail clone(){Mail mail=null;try {mail= (Mail) super.clone();} catch (CloneNotSupportedException e) {e.printStackTrace();}return mail;}}
package CreationalPattern.prototype.demo1;import java.util.LinkedHashMap;/*** Created by yangenneng on 2017-05-31 11:24* Abstract:客户端测试*/
public class Client {static LinkedHashMap linkedHashMap=new LinkedHashMap();static {linkedHashMap.put("张一","1274491995@qq.com");linkedHashMap.put("张二","2274491995@qq.com");linkedHashMap.put("张三","3274491995@qq.com");linkedHashMap.put("张四","4274491995@qq.com");linkedHashMap.put("张五","5274491995@qq.com");}public static void main(String[] args) {Mail mail=new Mail("参加讲座","2017.06.01参加六一儿童节讲座");mail.setTail("收到请回复");for (Object name:linkedHashMap.keySet()){Mail cloneMali=mail.clone();cloneMali.setReceiver(name.toString()+" "+linkedHashMap.get(name).toString());sendMail(cloneMali);}}public static void sendMail(Mail mail){System.out.println("成功发送邮件:"+"\t标题:"+mail.getSubject()+"\t收件人:"+mail.getReceiver()+"\t内容:"+mail.getContext()+"\t注意:"+mail.getTail());}}

运行结果

模式说明

Java内置了克隆机制,Object类具有一个clone()方法,能够实现对象的克隆,使得一个类支持克隆只需两步骤。

  1. 实现Cloneable接口
  2. 覆盖object的clone()方法,完成对象的克隆操作。为了外部能够访问,可以将访问修饰修改为public.

而要用C++实现的话就相当于是实现深拷贝而已。
如果用C++实现则(因为没有装C++的开发环境,所以只能用java写法模拟):

C++写法

/*** Created by yangenneng on 2017-05-31 11:20* Abstract:邮件类* c++写法*/
class Mail
{private String receiver;//收件人private String subject;//邮件标题private String context;//邮件内容private String tail;   //邮件尾部public String getReceiver(){return receiver;}public void setReceiver(String receiver){this.receiver = receiver;}public String getSubject(){return subject;}public void setSubject(String subject){this.subject = subject;}public String getContext(){return context;}public void setContext(String context){this.context = context;}public String getTail(){return tail;}public void setTail(String tail){this.tail = tail;}public Mail(String subject, String context){this.subject=subject;this.context=context;}public Mail clone(){Mail mail=new Mail(subject,context);mail.setReceiver(receiver);mail.setTail(tail);return mail;}}

客户端调用不变。结果也一样。

原型模式prototype-发送邮件实例相关推荐

  1. 原型模式(ProtoType) - Java里的对象复制

    一, 引用的复制和对象复制. 在编程中, 我们有时会用两个引用指向同一个对象. 例如: ArrayList a = new ArrayLIst(); ArrayList b = a; 看起来好像有a, ...

  2. 乐在其中设计模式(C#) - 原型模式(Prototype Pattern)

    [索引页] [源码下载] 乐在其中设计模式(C#) - 原型模式(Prototype Pattern) 作者:webabcd 介绍 用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象. ...

  3. 原型模式-prototype

    一.什么是原型模式 Prototype模式是一种对象创建型模式,它采取复制原型对象的方法来创建对象的实例.使用Prototype模式创建的实例,具有与原型一样的数据. 二.原型模式的特点 1.由原型对 ...

  4. C++设计模式——原型模式(Prototype Pattern)

    C++设计模式--原型模式(Prototype Pattern) 微信公众号:幼儿园的学霸 目录 文章目录 C++设计模式--原型模式(Prototype Pattern) 目录 定义 代码示例 普通 ...

  5. 原型模式(Prototype Pattern)

    原型模式(Prototype Pattern) 原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. ...

  6. Java设计模式--原型模式Prototype

    原型模式Prototype 原型模式使得用户可以通过复制对象样本来创建新对象.与通过调用构造函数创建对象相比,二者主要区别在于:通过复制创建的新对象一般会包含原始对象的某些状态. 原型模式属于对象的创 ...

  7. 设计模式(23):创建型-原型模式(Prototype)

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...

  8. 设计模式之原型模式(Prototype)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.FactoryMethod(工厂方法模式):2.Abstract Factory(抽象工厂模式):3.Sin ...

  9. 设计模式---原型模式(Prototype Pattern)

    在编程中有时候我们会发现,当我们需要一个实例,可是这个实例的创建过程十分复杂,在执行过程中 会消耗大量的时间,同时创建第一个实例和创建第二个时间的初始化信息并未改变.在此种情况下,直接New 一个实例 ...

  10. 原型模式Prototype,constructor,__proto__详解

    最近由于在找工作,又拿起<JavaScript高级程序设计>看了起来,从中也发现了自己确实还是有很多地方不懂,刚刚看到原型模式这里,今天终于搞懂了,当然,我也不知道自己的理解是否有错. 1 ...

最新文章

  1. 敏捷(Agile)与精益(Lean)对比
  2. [3D]绘制XYZ小坐标轴
  3. python multiprocessing模块
  4. Android Navigation Drawer样式抽屉的使用
  5. Docker容器中的Linux机器快速设置国内源
  6. 香橼做空跟谁学发第三枪 跟谁学股价盘后下跌1.37%
  7. 这就是八成女性不爱用刷脸支付的原因!支付宝:一周内给安排上
  8. CentOS 7下彻底卸载MySQL数据库
  9. sqlsever无法重新启动计算机,SQLServer 2008安装提示需要重启计算机,但是重启还是不通过解决方案...
  10. 【汇编语言】通用数据处理指令——算术运算类指令
  11. 【实物】端到端自动驾驶搭建教程(四)附完整资料
  12. 【转】临界区、互斥对象
  13. android 广播 飞行模式,Android 开启飞行模式的几种方式
  14. Mysql的server_id_MySQL如何生成唯一的server-id
  15. 100%快速解决谷歌翻译无法使用的问题,附修复工具
  16. 泛函分析之集合的映射和可数集与不可数集
  17. 1.STM32F103-点亮第一颗LED
  18. 大数据面前,统计学的价值在哪里
  19. Packet Tracer 5.0 汉化包
  20. 流程控制语句break continu return 及方法(函数)

热门文章

  1. 神雕2暂无服务器信息,神雕侠侣2手游4月2日停服维护公告_神雕侠侣2手游4月2日更新了什么_玩游戏网...
  2. 图片 EXIF 信息中旋转参数 Orientation 的理解
  3. 实战:读懂这一篇掌握电商后台设计
  4. 杀毒软件的Linux版,Linux杀毒软件免费版下载
  5. openxml操作word的基本应用
  6. 百度朱光:将技术基因注入百度金融,是我们未来三五年要做的事
  7. MariaDB glare cluster简介
  8. python在线评测系统_关于开源OJ_在线评测系统(Online Judge)设计与实现的研究与分析...
  9. 项目中单独指定maven远程仓库
  10. Ubuntu20系统重装/修复