设计模式之原型模式

来源:互联网 发布:东京大学医学部 知乎 编辑:程序博客网 时间: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
原创粉丝点击