设计模式之原型模式
来源:互联网 发布:东京大学医学部 知乎 编辑:程序博客网 时间:2024/05/29 07:11
原型模式定义:使用原型实例制定创建对象的种类,并且通过拷贝这些原型创建新的对象。
优点:
1、性能优良。原型模式是在内存二进制流的拷贝,要比直接new一个对象性能好的很多,尤其是在一个循环体内产生大量的对象时。
2、逃避构造函数的约束。
注意:
1、构造函数不会被执行。
2、设计到浅拷贝和深拷贝问题。
3、使用clone时,不要使用final修饰变量。
类图如下:
实现代码如下:
AdvTemplete类:
package com.designpatterns.prototype;public class AdvTemplete {private String AdvContext = "XX银行国庆节信用卡抽奖活动";private String AdvSubject = "国庆节抽奖活动通知:只要刷卡就送你一百万……!";public String getAdvContext() {return AdvContext;}public String getAdvSubject() {return AdvSubject;}}
Mail类:
package com.designpatterns.prototype;public class Mail implements Cloneable {private String receiver;private String subject;private String appellation;private String context;private String tail;public Mail(AdvTemplete advTemplete) {this.context = advTemplete.getAdvContext();this.subject = advTemplete.getAdvSubject();}public String getReceiver() {return receiver;}public void setReceiver(String receiver) {this.receiver = receiver;}public String getAppellation() {return appellation;}public String getSubject() {return subject;}public String getContext() {return context;}public void setAppellation(String appellation) {this.appellation = appellation;}public String getTail() {return tail;}public void setTail(String tail) {this.tail = tail;}@Overridepublic Mail clone() {Mail mail = null;try {mail = (Mail) super.clone();} catch (CloneNotSupportedException e) {e.printStackTrace();}return mail;}}
测试类:
package com.designpatterns.prototype;import java.util.Random;public class Client {private static int MaxCount =6;public static void main(String[] args) {Mail mail = new Mail(new AdvTemplete());mail.setTail("XXX银行版权所有!");for (int i = 0; i < MaxCount; i++) {Mail cloneMail = mail.clone();cloneMail.setReceiver(getRandString(5)+"@"+getRandString(8)+".com");cloneMail.setAppellation(getRandString(5)+"先生(女士)");sendMail(cloneMail);}}private static void sendMail(Mail cloneMail) {System.out.println("标题:"+cloneMail.getSubject()+"\t收件人:"+cloneMail.getReceiver()+"\t...发送成功");}private static String getRandString(int i) {String s = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";int len = s.length();Random r =new Random();StringBuilder sb = new StringBuilder();for (int j = 0; j < i; j++) {sb.append(s.charAt(r.nextInt(len)));}return sb.toString();}}
当创建给定类的实例的过程很昂贵或者很复杂时,就使用原型模式。
原型模式允许你通过复制现有的实例来创建对象。
这就是原型模式。
参考资料:
设计模式之禅
备注:
转载请注明出处
http://blog.csdn.net/wsyw126/article/details/50999174
by WSYW126
0 0
- 设计模式之原型
- 设计模式之原型
- 设计模式 之 原型
- 设计模式之原型
- 设计模式之原型
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之-原型模式
- 设计模式之 原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之--原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- 数据库中的名词解释
- int $0x80系统调用的idea
- Music published vary from Cantonese to softMusic ,sure your love
- Linux环境下sendmail发送html格式正文及csv格式附件邮件
- Linux下安装Eclipse IDE for C/C++ Developers
- 设计模式之原型模式
- JAVA 数组全排列
- 自定义输入法窗口位置
- UDF_StringToTable 普通与递归实现
- 面向对象模式与框架
- 51nod-1003 阶乘后面0的数量
- 利用任务调度特性检测Android模拟器
- Python Built-in Exception
- SpringMVC源码分析系列