原型模式(创建类)
来源:互联网 发布:丹尼斯约翰逊数据 编辑:程序博客网 时间:2024/06/14 13:28
UML
介绍
- 意图: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
- 优点: 效率高,逃避构造约束
- 缺点: 逃避构造约束
例子
AdvTemplate
public class AdvTemplate { private String advContext ; private String advSubject ; public String getAdvContext() { return advContext; } public void setAdvContext(String advContext) { this.advContext = advContext; } public String getAdvSubject() { return advSubject; } public void setAdvSubject(String advSubject) { this.advSubject = advSubject; } public AdvTemplate(String advContext, String advSubject) { super(); this.advContext = advContext; this.advSubject = advSubject; } }
Mail(ConcretePrototype)
public class Mail implements Cloneable{ private String receiver ; private String subject ; private String context ; private String tail ; public Mail(AdvTemplate advtemplate){ this.subject = advtemplate.getAdvSubject() ; this.context = advtemplate.getAdvContext() ; } 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; } @Override public Mail clone(){ try { return (Mail)super.clone() ; } catch (CloneNotSupportedException e) { e.printStackTrace(); } return null ; }}
Client
import java.util.Random;import java.util.concurrent.Callable;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class Client { private static final int MAX_COUNT = 10 ; public static void main(String[] args) { ExecutorService executor = Executors.newCachedThreadPool() ; AdvTemplate advTemplate = new AdvTemplate("元旦大促销,买就送", "元旦大促销") ; Mail mail = new Mail(advTemplate) ; mail.setTail("版权所有"); for(int i = 0;i < MAX_COUNT ; i++){ final Mail sendMail = mail.clone() ; Random random = new Random() ; sendMail.setReceiver((1000000000 + random.nextInt(1000000000)) + "@163.com"); Callable<Boolean> task = new Callable<Boolean>(){ public Boolean call(){ return sendMail(sendMail) ; } } ; executor.submit(task) ; } } public static boolean sendMail(Mail mail){ String s = "Reciever:" + mail.getReceiver() + " Subject:" + mail.getSubject() + " Context:" + mail.getContext() + " " ; boolean result = new Random().nextBoolean() ; if(result){ s += "发送成功" ; }else{ s += "发送失败" ; } System.out.println(s); return result ; } }
参考
设计模式之禅
0 0
- 原型模式(创建类)
- 创建类模式5 --原型模式
- 创建模式->原型模式
- Prototype - 原型创建模式
- 创建型模式-原型
- 创建型--原型模式
- 原型模式(创建型)
- 原型模式(对象创建)
- 设计模式之创建类模式——原型模式
- 创建型模式-原型模式
- 创建型模式---原型模式
- 创建型模式--原型模式
- 创建型模式-原型模式
- 原型模式(创建型模式)
- Prototype原型(创建型模式)
- 创建模式之Prototype(原型)
- 创建模式之Prototype(原型)
- Prototype原型(创建型模式)
- 51nod_1305 Pairwise Sum and Divide(数学规律)
- oracle 12c pdb与cdb
- 1138
- vmware中hadoop的linux环境集群配置环境准备
- LeetCode笔记:125. Valid Palindrome
- 原型模式(创建类)
- 关于 tomcat 集群中 session 共享的三种方法
- 最大子方阵
- LDD之中断
- 数据结构与算法(C语言版)__冒泡排序
- 【解决】java.net.BindException: Address already in use: JVM_Bind
- 1116. Come on! Let's C (20)
- 使用hive来分析flume收集的日志数据
- 1162