原型模式prototype-发送邮件实例
- 模式简介
- 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()方法,能够实现对象的克隆,使得一个类支持克隆只需两步骤。
- 实现Cloneable接口
- 覆盖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-发送邮件实例相关推荐
- 原型模式(ProtoType) - Java里的对象复制
一, 引用的复制和对象复制. 在编程中, 我们有时会用两个引用指向同一个对象. 例如: ArrayList a = new ArrayLIst(); ArrayList b = a; 看起来好像有a, ...
- 乐在其中设计模式(C#) - 原型模式(Prototype Pattern)
[索引页] [源码下载] 乐在其中设计模式(C#) - 原型模式(Prototype Pattern) 作者:webabcd 介绍 用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象. ...
- 原型模式-prototype
一.什么是原型模式 Prototype模式是一种对象创建型模式,它采取复制原型对象的方法来创建对象的实例.使用Prototype模式创建的实例,具有与原型一样的数据. 二.原型模式的特点 1.由原型对 ...
- C++设计模式——原型模式(Prototype Pattern)
C++设计模式--原型模式(Prototype Pattern) 微信公众号:幼儿园的学霸 目录 文章目录 C++设计模式--原型模式(Prototype Pattern) 目录 定义 代码示例 普通 ...
- 原型模式(Prototype Pattern)
原型模式(Prototype Pattern) 原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. ...
- Java设计模式--原型模式Prototype
原型模式Prototype 原型模式使得用户可以通过复制对象样本来创建新对象.与通过调用构造函数创建对象相比,二者主要区别在于:通过复制创建的新对象一般会包含原始对象的某些状态. 原型模式属于对象的创 ...
- 设计模式(23):创建型-原型模式(Prototype)
设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...
- 设计模式之原型模式(Prototype)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.FactoryMethod(工厂方法模式):2.Abstract Factory(抽象工厂模式):3.Sin ...
- 设计模式---原型模式(Prototype Pattern)
在编程中有时候我们会发现,当我们需要一个实例,可是这个实例的创建过程十分复杂,在执行过程中 会消耗大量的时间,同时创建第一个实例和创建第二个时间的初始化信息并未改变.在此种情况下,直接New 一个实例 ...
- 原型模式Prototype,constructor,__proto__详解
最近由于在找工作,又拿起<JavaScript高级程序设计>看了起来,从中也发现了自己确实还是有很多地方不懂,刚刚看到原型模式这里,今天终于搞懂了,当然,我也不知道自己的理解是否有错. 1 ...
最新文章
- 敏捷(Agile)与精益(Lean)对比
- [3D]绘制XYZ小坐标轴
- python multiprocessing模块
- Android Navigation Drawer样式抽屉的使用
- Docker容器中的Linux机器快速设置国内源
- 香橼做空跟谁学发第三枪 跟谁学股价盘后下跌1.37%
- 这就是八成女性不爱用刷脸支付的原因!支付宝:一周内给安排上
- CentOS 7下彻底卸载MySQL数据库
- sqlsever无法重新启动计算机,SQLServer 2008安装提示需要重启计算机,但是重启还是不通过解决方案...
- 【汇编语言】通用数据处理指令——算术运算类指令
- 【实物】端到端自动驾驶搭建教程(四)附完整资料
- 【转】临界区、互斥对象
- android 广播 飞行模式,Android 开启飞行模式的几种方式
- Mysql的server_id_MySQL如何生成唯一的server-id
- 100%快速解决谷歌翻译无法使用的问题,附修复工具
- 泛函分析之集合的映射和可数集与不可数集
- 1.STM32F103-点亮第一颗LED
- 大数据面前,统计学的价值在哪里
- Packet Tracer 5.0 汉化包
- 流程控制语句break continu return 及方法(函数)
热门文章
- 神雕2暂无服务器信息,神雕侠侣2手游4月2日停服维护公告_神雕侠侣2手游4月2日更新了什么_玩游戏网...
- 图片 EXIF 信息中旋转参数 Orientation 的理解
- 实战:读懂这一篇掌握电商后台设计
- 杀毒软件的Linux版,Linux杀毒软件免费版下载
- openxml操作word的基本应用
- 百度朱光:将技术基因注入百度金融,是我们未来三五年要做的事
- MariaDB glare cluster简介
- python在线评测系统_关于开源OJ_在线评测系统(Online Judge)设计与实现的研究与分析...
- 项目中单独指定maven远程仓库
- Ubuntu20系统重装/修复