对象的克隆——原型模式(二)

194 篇文章 12 订阅
189 篇文章 403 订阅

7.3 完整解决方案

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

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

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

//工作周报WeeklyLog:具体原型类,考虑到代码的可读性和易理解性,只列出部分与模式相关的核心代码

class WeeklyLog implements Cloneable

{

       private  String name;

       private  String date;

       private  String content;

       public  void setName(String name) {

              this.name  = name;

       }

       public  void setDate(String date) {

              this.date  = date;

       }

       public  void setContent(String content) {

              this.content  = content;

       }

       public  String getName() {

              return  (this.name);

       }

       public  String getDate() {

              return  (this.date);

       }

       public  String getContent() {

              return  (this.content);

       }

     //克隆方法clone(),此处使用Java语言提供的克隆机制

       public WeeklyLog clone()

       {

              Object obj = null;

              try

              {

                     obj = super.clone();

                     return (WeeklyLog)obj;     

              }

              catch(CloneNotSupportedException e)

              {

                     System.out.println("不支持复制!");

                     return null;

              }

       }

}

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

class Client

{

       public  static void main(String args[])

       {

              WeeklyLog log_previous = new WeeklyLog();  //创建原型对象

              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

姓名:张无忌

内容:这周工作很忙,每天加班!

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

 

思考

如果在Client类的main()函数中增加如下几条语句:

System.out.println(log_previous == log_new);

System.out.println(log_previous.getDate() == log_new.getDate());

System.out.println(log_previous.getName() == log_new.getName());

System.out.println(log_previous.getContent() == log_new.getContent());

预测这些语句的输出结果。

【作者:刘伟 http://blog.csdn.net/lovelion

  • 25
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 35
    评论
评论 35
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值