zoukankan      html  css  js  c++  java
  • 原型模式

    原型模式:就是不用通过new来产生对象,而是通过克隆来产生新的对象。

    下面主要是通过电子账单例子来介绍:
    第一是没有用原型模式实现的:记得我是一个类一个类的代码复制上去的。

     

    package patten.prototyprPattern;
    
    public class AdvTemplate {
        //广告信的名称
        private String advSubject = "xx银行国庆信用卡抽奖活动";
        //广告信的内容
        private String advContext = "国庆抽奖活动通知:只要刷卡就送你100万,,";
        //取得广告信的名称
        public String getAdvSubject() {
            return advSubject;
        }
        //取得广告信的内容
        public String getAdvContext() {
            return advContext;
        }
    }

     

     

    package patten.prototyprPattern;
    
    public class Mail {
        //收件人
        private String receiver;
        //邮件名称
        private  String subject;
        //称谓
        private String application;
        //邮件的内容
        private String context;
        //邮件尾部
        private String tail;
    
    
        //构造函数
        public Mail(AdvTemplate advTemplate){
            this.context = advTemplate.getAdvContext();
            this.subject = advTemplate.getAdvSubject();
        }
        //以下是getter和setter方法
        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 getApplication() {
            return application;
        }
    
        public void setApplication(String application) {
            this.application = application;
        }
    
        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;
        }
    }




    package patten.prototyprPattern;
    
    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("xx银行版权所有");
            while(i < MAX_COUNT){
                //以下是每封邮件的不同地方
                mail.setApplication(getRandString(5)+"先生(女生)");
                mail.setReceiver(getRandString(5)+"@"+getRandString(8)+".com");
                //然后发送邮件
                sendMail(mail);
                i++;
            }
        }
    
    
        //发送邮件
        public  static void sendMail(Mail mail){
           System.out.println("标题:"+mail.getSubject()+"	收件人:"+mail.getReceiver()+"	...发送成功!");
    
        }
    
        //获取指定长度的随机字符
        public static String getRandString(int maxLength){
            String source = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";
            StringBuffer sb = new StringBuffer();
            Random rand = new Random();
            for(int i = 0;i<maxLength ;i++){
                sb.append(source.charAt(rand.nextInt(source.length())));
            }
            return sb.toString();
        }
    }

     

     

    下面是用原型模式来实现的:你们可以对比一下:大字的是变化的

      

    package patten.prototyprPattern2;
    
    public class AdvTemplate {
        //广告信的名称
        private String advSubject = "xx银行国庆信用卡抽奖活动";
        //广告信的内容
        private String advContext = "国庆抽奖活动通知:只要刷卡就送你100万,,";
        //取得广告信的名称
        public String getAdvSubject() {
            return advSubject;
        }
        //取得广告信的内容
        public String getAdvContext() {
            return advContext;
        }
    }
    package patten.prototyprPattern2;
    
    public class Mail implements Cloneable{
        //收件人
        private String receiver;
        //邮件名称
        private  String subject;
        //称谓
        private String application;
        //邮件的内容
        private String context;
        //邮件尾部
        private String tail;
    
        //修改后的邮件类
        @Override
        public Mail clone(){
            Mail mail = null;
            try{
                mail = (Mail)super.clone();
            }catch (CloneNotSupportedException e){
                e.printStackTrace();
            }
            return mail;
        }
    
    
        //构造函数
        public Mail(AdvTemplate advTemplate){
            this.context = advTemplate.getAdvContext();
            this.subject = advTemplate.getAdvSubject();
        }
        //以下是getter和setter方法
        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 getApplication() {
            return application;
        }
    
        public void setApplication(String application) {
            this.application = application;
        }
    
        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;
        }
    }
    package patten.prototyprPattern2;
    
    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("xx银行版权所有");
            while(i < MAX_COUNT){
                //以下是每封邮件的不同地方
                  Mail cloneMail = mail.clone();
                cloneMail.setApplication(getRandString(5)+"先生(女生)");
                cloneMail.setReceiver(getRandString(5)+"@"+getRandString(8)+".com");
                //然后发送邮件
                sendMail(cloneMail);
                i++;
            }
        }
    
    
        //发送邮件
        public  static void sendMail(Mail mail){
           System.out.println("标题:"+mail.getSubject()+"	收件人:"+mail.getReceiver()+"	...发送成功!");
    
        }
    
        //获取指定长度的随机字符
        public static String getRandString(int maxLength){
            String source = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";
            StringBuffer sb = new StringBuffer();
            Random rand = new Random();
            for(int i = 0;i<maxLength ;i++){
                sb.append(source.charAt(rand.nextInt(source.length())));
            }
            return sb.toString();
        }
    }
    会当凌绝顶,一览众山小
  • 相关阅读:
    Linux 字典数组应用
    Linux shell 字符串切割 内置方法
    【Swing/文本组件】定义自动换行的文本域
    【C++语法基础】实验1
    【Swing程序设计/常用面板】
    【标签组件与图标 3.3】
    【2018.2.26算法总结#分治】
    数据结构#课表排序及查询
    数据结构#前序遍历建立二叉树 输出中序遍历
    OJ#1002 又是a+b
  • 原文地址:https://www.cnblogs.com/quenvpengyou/p/14317495.html
Copyright © 2011-2022 走看看