23种设计模式之原型模式(一)
来源:互联网 发布:电脑点歌软件下载 编辑:程序博客网 时间:2024/05/22 14:40
原型模式
首先在这里感谢设计模式之禅这本书给我的启发,让我学到了很多东西。下面的部分内容就是借鉴此书。
举一个例子来更加清楚的解释原型模式:
AdvTemplate类是一个广告信的模板,一般都是从数据库中取出,这里我们使用一个静态的值来做代表,Mail类是一封邮件类,发送机发送的就是这个类,我们先来看看下AdvTemplate类:
public class AdvTemplate {//广告信名称private String advSubject = "xx银行端午信用卡抽奖活动";//广告信内容private String advContext = "端午抽奖活动通知,只要刷卡就送一百万...";//取得广告信名称public String getAdvSubject(){return this.advSubject;}//取得广告信内容public String getAdvContext(){return this.advContext;}}
public class Mail {//收件人private String receiver;//邮件名称private String subject;//称谓private String appellation;//邮件内容private String context;//邮件的尾部,一般加上xxx版权所有private String tail;//构造函数public Mail(AdvTemplate advTemplate){this.context = advTemplate.getAdvContext();this.subject = advTemplate.getAdvSubject();}//set get方法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 getAppellation() {return appellation;}public void setAppellation(String appellation) {this.appellation = appellation;}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;}}
import java.util.Random;public class Client {//发送账单的数量,这个值从数据库中获取private static int MAX_COUNT = 6;public static void main(String[] args){//模拟发送邮件int i = 0;//把模板定义出来,Mail mail = new Mail(new AdvTemplate());mail.setTail("xxx银行版权所有");while(i<MAX_COUNT){mail.setAppellation(getRandString(5) +"先生(女士)");mail.setReceiver(getRandString(5) + "@" + getRandString(8) + ".com");sendMail(mail);i++;}}//发送邮件public static void sendMail(Mail mail){System.out.println("标题:" + mail.getSubject() + "\t收件人:" + mail.getReceiver() + "\t发送成功!");}//指定长度随机字符串public static String getRandString(int maxLength){String source = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";StringBuffer buffer = new StringBuffer();Random random = new Random();for(int i = 0; i<maxLength; i++){buffer.append(source.charAt(random.nextInt(source.length())));}return buffer.toString();}}
运行的结果如下:
标题:xx银行端午信用卡抽奖活动收件人:tGwOW@yqilcYMM.com发送成功!标题:xx银行端午信用卡抽奖活动收件人:XrCKF@IBzIuuWn.com发送成功!标题:xx银行端午信用卡抽奖活动收件人:hzkWX@yjlJSTJD.com发送成功!标题:xx银行端午信用卡抽奖活动收件人:AYVVR@rWlSisTk.com发送成功!标题:xx银行端午信用卡抽奖活动收件人:tpReC@QeyQkROL.com发送成功!标题:xx银行端午信用卡抽奖活动收件人:ieamo@LUnesEsP.com发送成功!
大家看一下这个程序是不是有问题。Look here 这个是一个线程在运行,也就是发送的单线程的,那按照一封邮件发出去需要0.02s,600万的花就需要33小时,也就是一个整天都发送不完,今天发送不完明天账单又产生了,日积月累肯定是不行的。
这个好办,我们把sendMail改成多线程的,具体看下一节。
0 0
- 23种设计模式之原型模式(一)
- 23种设计模式之原型模式
- 23种设计模式之原型模式
- 23种设计模式之原型模式
- 每天一设计模式之原型模式
- iOS设计模式一之原型模式
- 23设计模式之原型模式(Prototype)
- 23设计模式之原型模式(Prototype)
- 24种设计模式之--原型模式
- 设计模式之原型
- 设计模式之原型
- 设计模式 之 原型
- 设计模式之原型
- 设计模式之原型
- 23种设计模式之原型模式(Prototype)
- 23种设计模式之原型模式(Prototype)
- 23种设计模式之原型模式2
- c++23种设计模式之原型模式
- OpenCv下载地址
- Android基础教程之简单的Button事件响应综合提示控件Toast的应用
- 游戏开发,何去何从
- UVA 11827 Maximum GCD
- LiteDB实践使用
- 23种设计模式之原型模式(一)
- 【转载】SPFA
- c++关于结尾遇到‘\n’或其他特殊字符结束读取的问题(个人总结,大神勿喷)
- hadoop启动后jps没有namenode
- 努力了一天
- c++函数实现*的正则匹配判断功能
- UVA 10200 Prime Time
- Sweet_butter
- 如何快速说服女人上床