2023-04-01  阅读(4)
原文作者:LoveLion 原文地址:https://blog.csdn.net/lovelion/article/details/7424559

7.3 完整解决方案

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

202304012051122291.png

图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());预测这些语句的输出结果。| | :-----: | :-----: | |     |  思考 如果在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());预测这些语句的输出结果。 |

Java 面试宝典是大明哥全力打造的 Java 精品面试题,它是一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是一道道面试题,而是一套完整的 Java 知识体系,一套你 Java 知识点的扫盲贴。

它的内容包括:

  • 大厂真题:Java 面试宝典里面的题目都是最近几年的高频的大厂面试真题。
  • 原创内容:Java 面试宝典内容全部都是大明哥原创,内容全面且通俗易懂,回答部分可以直接作为面试回答内容。
  • 持续更新:一次购买,永久有效。大明哥会持续更新 3+ 年,累计更新 1000+,宝典会不断迭代更新,保证最新、最全面。
  • 覆盖全面:本宝典累计更新 1000+,从 Java 入门到 Java 架构的高频面试题,实现 360° 全覆盖。
  • 不止面试:内容包含面试题解析、内容详解、知识扩展,它不仅仅只是一份面试题,更是一套完整的 Java 知识体系。
  • 宝典详情:https://www.yuque.com/chenssy/sike-java/xvlo920axlp7sf4k
  • 宝典总览:https://www.yuque.com/chenssy/sike-java/yogsehzntzgp4ly1
  • 宝典进展:https://www.yuque.com/chenssy/sike-java/en9ned7loo47z5aw

目前 Java 面试宝典累计更新 400+ 道,总字数 42w+。大明哥还在持续更新中,下图是大明哥在 2024-12 月份的更新情况:

想了解详情的小伙伴,扫描下面二维码加大明哥微信【daming091】咨询

同时,大明哥也整理一套目前市面最常见的热点面试题。微信搜[大明哥聊 Java]或扫描下方二维码关注大明哥的原创公众号[大明哥聊 Java] ,回复【面试题】 即可免费领取。

阅读全文