原型模式prototype-发送邮件实例
来源:互联网 发布:国内开会软件 编辑:程序博客网 时间:2024/06/08 19:05
- 模式简介
- 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; }}
客户端调用不变。结果也一样。
阅读全文
0 0
- 原型模式prototype-发送邮件实例
- 原型模式 Prototype模式
- 原型模式 Prototype模式
- 原型模式:prototype模式
- 原型模式 Prototype模式
- Prototype模式(原型模式)
- 原型模式:prototype模式
- Net设计模式实例之原型模式( Prototype Pattern)
- 原型模式(Prototype)
- 原型模式(prototype)
- 原型(Prototype)模式
- 原型模式(Prototype Pattern)
- 原型(ProtoType)模式
- 原型模式(Prototype Pattern)
- 原型模式(Prototype Pattern)
- 原型模式 Prototype Pattern
- Prototype 原型模式
- 原型模式(Prototype)
- Caffe——训练和测试自己的图片
- 什么是HIS、PACS、LIS、RIS
- 集合-Map
- 三个案例带你看懂LayoutInflater中inflate方法两个参数和三个参数的区别
- 求1000以内素数平均值
- 原型模式prototype-发送邮件实例
- BAT批处理中选择分支后启动新窗口执行命令的示例
- Django Channels 实时在线用户列表
- WebRoot与WebContent区别
- Leetcode 113. Path Sum II
- 常用排序法(冒泡法,选择法)
- 给调皮的AssetBundle加上面向对象式加载调试管理
- 在Java中使用Lambda表达式统计词频
- @Autowired和@Resource的区别是什么?