原型模式(创建类)

来源:互联网 发布:丹尼斯约翰逊数据 编辑:程序博客网 时间:2024/06/11 01:38

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
原创粉丝点击