2019-06-09 10:15  阅读(2540)
文章分类:史上最全设计模式 文章标签:设计模式Java 设计模式
©  原文作者:Liuwei-Sunny 原文地址:https://blog.csdn.net/lovelion

作者:Liuwei-Sunny

出处:https://blog.csdn.net/lovelion


7.3 完整解决方案

Sunny公司开发人员决定使用原型模式来实现工作周报的快速创建,快速创建工作周报结构图如图7-3所示:

2019060910031_1.png

图7-3 快速创建工作周报结构图

在图7-3中,WeeklyLog充当具体原型类,Object类充当抽象原型类,clone()方法为原型方法。WeeklyLog类的代码如下所示:

//工作周报WeeklyLog:具体原型类,考虑到代码的可读性和易理解性,只列出部分与模式相关的核心代码classWeeklyLogimplementsCloneable{      private Stringname;      private Stringdate;      private Stringcontent;      public voidsetName(Stringname){             this.name =name;      }      public voidsetDate(Stringdate){             this.date =date;      }      public voidsetContent(Stringcontent){             this.content =content;      }      public StringgetName(){             return (this.name);      }      public StringgetDate(){             return (this.date);      }      public StringgetContent(){             return (this.content);      }    //克隆方法clone(),此处使用Java语言提供的克隆机制      publicWeeklyLogclone()      {             Objectobj=null;             try             {                    obj=super.clone();                    return(WeeklyLog)obj;                  }             catch(CloneNotSupportedExceptione)             {                    System.out.println("不支持复制!");                    returnnull;             }      }}
//工作周报WeeklyLog:具体原型类,考虑到代码的可读性和易理解性,只列出部分与模式相关的核心代码classWeeklyLogimplementsCloneable{      private Stringname;      private Stringdate;      private Stringcontent;      public voidsetName(Stringname){             this.name =name;      }      public voidsetDate(Stringdate){             this.date =date;      }      public voidsetContent(Stringcontent){             this.content =content;      }      public StringgetName(){             return (this.name);      }      public StringgetDate(){             return (this.date);      }      public StringgetContent(){             return (this.content);      }    //克隆方法clone(),此处使用Java语言提供的克隆机制      publicWeeklyLogclone()      {             Objectobj=null;             try             {                    obj=super.clone();                    return(WeeklyLog)obj;                  }             catch(CloneNotSupportedExceptione)             {                    System.out.println("不支持复制!");                    returnnull;             }      }}

编写如下客户端测试代码:

classClient{      public staticvoidmain(Stringargs[])      {             WeeklyLoglog_previous=newWeeklyLog(); //创建原型对象             log_previous.setName("张无忌");             log_previous.setDate("第12周");             log_previous.setContent("这周工作很忙,每天加班!");                          System.out.println("周报");             System.out.println("周次:"+ log_previous.getDate());             System.out.println("姓名:"+ log_previous.getName());             System.out.println("内容:"+ log_previous.getContent());             System.out.println("--------------------------------");                          WeeklyLog log_new;            log_new =log_previous.clone();//调用克隆方法创建克隆对象             log_new.setDate("第13周");             System.out.println("周报");             System.out.println("周次:"+log_new.getDate());             System.out.println("姓名:"+log_new.getName());             System.out.println("内容:"+log_new.getContent());      }}
classClient{      public staticvoidmain(Stringargs[])      {             WeeklyLoglog_previous=newWeeklyLog(); //创建原型对象             log_previous.setName("张无忌");             log_previous.setDate("第12周");             log_previous.setContent("这周工作很忙,每天加班!");                          System.out.println("周报");             System.out.println("周次:"+ log_previous.getDate());             System.out.println("姓名:"+ log_previous.getName());             System.out.println("内容:"+ log_previous.getContent());             System.out.println("--------------------------------");                          WeeklyLog log_new;            log_new =log_previous.clone();//调用克隆方法创建克隆对象             log_new.setDate("第13周");             System.out.println("周报");             System.out.println("周次:"+log_new.getDate());             System.out.println("姓名:"+log_new.getName());             System.out.println("内容:"+log_new.getContent());      }}

编译并运行程序,输出结果如下:

周报周次:第12周姓名:张无忌内容:这周工作很忙,每天加班!--------------------------------周报周次:第13周姓名:张无忌内容:这周工作很忙,每天加班!
周报周次:第12周姓名:张无忌内容:这周工作很忙,每天加班!--------------------------------周报周次:第13周姓名:张无忌内容:这周工作很忙,每天加班!

通过已创建的工作周报可以快速创建新的周报,然后再根据需要修改周报,无须再从头开始创建。原型模式为工作流系统中任务单的快速生成提供了一种解决方案。

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> 对象的克隆——原型模式(二):工作周报的原型模式解决方案
上一篇
对象的克隆——原型模式(一):大同小异的工作周报,原型模式概述
下一篇
对象的克隆——原型模式(三):带附件的周报【浅克隆,深克隆】