Java使用原型模式展现每日生活应用案例详解

作者:chengqiuming 时间:2023-03-08 04:27:08 

本文实例讲述了Java使用原型模式展现每日生活。分享给大家供大家参考,具体如下:

一、模式定义

用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。

二、模式举例

1 模式分析

我们借用每日上班情景耒说明这一模式。

2 故事情节分析图

Java使用原型模式展现每日生活应用案例详解

3 原型模式静态建模

Java使用原型模式展现每日生活应用案例详解

4 代码示例

4.1 原型建立


package com.prototype.pojo;
/**
* 日常生活类
*
* @author
*
*/
public class DayLife implements Cloneable {
 // 构造方法
 public DayLife() {
   System.out.println("-- 执行构造方法了! --");
 }
 // 起床
 private String getUp;
 // 坐公交
 private String byBus;
 // 下车,买早餐
 private String getFood;
 // 中午小憩
 private String noon;
 // 下午开始工作
 private String afternoonWork;
 // 下班回家
 private String goHome;
 // 晚上休闲
 private String night;
 public String getGetUp() {
   return getUp;
 }
 public void setGetUp(String getUp) {
   this.getUp = getUp;
 }
 public String getByBus() {
   return byBus;
 }
 public void setByBus(String byBus) {
   this.byBus = byBus;
 }
 public String getGetFood() {
   return getFood;
 }
 public void setGetFood(String getFood) {
   this.getFood = getFood;
 }
 public String getNoon() {
   return noon;
 }
 public void setNoon(String noon) {
   this.noon = noon;
 }
 public String getAfternoonWork() {
   return afternoonWork;
 }
 public void setAfternoonWork(String afternoonWork) {
   this.afternoonWork = afternoonWork;
 }
 public String getGoHome() {
   return goHome;
 }
 public void setGoHome(String goHome) {
   this.goHome = goHome;
 }
 public String getNight() {
   return night;
 }
 public void setNight(String night) {
   this.night = night;
 }
 /**
  * 打印输出日常生活信息
  */
 public void print() {
   System.out.println(this.getGetUp());
   System.out.println(this.getByBus());
   System.out.println(this.getGetFood());
   System.out.println(this.getNoon());
   System.out.println(this.getAfternoonWork());
   System.out.println(this.getGoHome());
   System.out.println(this.getNight());
 }
 /**
  * clone方法
  */
 @Override
 public DayLife clone() {
   try {
     // 调用超类的clone方法(超类?也没有集成任何类啊?哪里来的超类?别忘记了,所有类都是Object的子类哦!)
     return (DayLife) super.clone();
   } catch (Exception e) {
   }
   return null;
 }
}

4.2 创建生成原型对象的抽象工厂


package com.prototype.factory;
import com.prototype.pojo.DayLife;
/**
* 工厂类
*
* @author
*
*/
public interface ILifeFactory {
 /**
  * 生产DayLife对象
  *
  * @return
  */
 public DayLife getNewInstance();
}

4.3 创建生成原型对象的具体工厂


package com.prototype.factory.impl;
import com.prototype.factory.ILifeFactory;
import com.prototype.pojo.DayLife;
/**
* 工厂实现类
*
* @author
*
*/
public class LifeFactoryImpl implements ILifeFactory {
 // DayLife对象实例用于初始化
 private static DayLife dayLife = null;
 /**
  * getNewInstance方法实现:
  *
  * 首先判断dayLife是否为null:
  * 如果是null,则使用new创建一个DayLife对象,同时设置初始内容,然后赋值给dayLife对象实例,然后返回;
  * 如果不是null,则使用dayLift的clone方法产生一个新对象并复制给dayLife对象,然后返回
  */
 @Override
 public DayLife getNewInstance() {
   // 判断dayLife是否为null
   if (dayLife == null) {
     // 如果为null
     // 输出是使用new 产生的对象。注意:new这个只使用一次哦!
     System.out.println(" new DayLife !");
     // 设置dayLife内容
     dayLife = new DayLife();
     dayLife.setGetUp("7:00起床");
     dayLife.setByBus("7:30坐公交车");
     dayLife.setGetFood("8:30到公司附近的公交站下车,经过路旁的早餐车时会顺便买好早餐一起带到公司");
     dayLife.setNoon("午餐在公司附近的小餐馆解决,然后在办公室的座椅上小憩一会");
     dayLife.setAfternoonWork("13:30开始了下午的工作");
     dayLife.setGoHome("17:30准时下班");
     dayLife.setNight("晚上休闲娱乐");
   } else {
     // 如果不为null
     // 输出是使用clone方法产生的对象
     System.out.println(" clone DayLife !");
     // 将clone对象赋值给dayLife ,返回
     dayLife = dayLife.clone();
   }
   return dayLife;
 }
}

4.4 每日工作情景展现


package com;
import com.prototype.factory.ILifeFactory;
import com.prototype.factory.impl.LifeFactoryImpl;
import com.prototype.pojo.DayLife;
/**
* 主应用程序
*
* @author
*
*/
public class Client {
 public static void main(String[] args) {
   // 创建工厂
   ILifeFactory lifeFactory = new LifeFactoryImpl();
   // 打印输出DayLife默认内容
   lifeFactory.getNewInstance().print();
   // 再次获得DayLife,修改getUp内容后 输出内容
   System.out.println("------------------------");
   DayLife dayLife = lifeFactory.getNewInstance();
   dayLife.setGetUp("早上赖床了!7::15才起床!");
   dayLife.print();
   // 再次获得DayLife,修改getUp内容后 输出内容
   // System.out.println("------------------------");
   // DayLife dayLife2 = lifeFactory.getNewInstance();
   // dayLife2.setGetUp("早上赖床了!7::30才起床!");
   // dayLife2.print();
 }
}

运行结果

 new DayLife !
-- 执行构造方法了! --
7:00起床
7:30坐公交车
8:30到公司附近的公交站下车,经过路旁的早餐车时会顺便买好早餐一起带到公司
午餐在公司附近的小餐馆解决,然后在办公室的座椅上小憩一会
13:30开始了下午的工作
17:30准时下班
晚上休闲娱乐
------------------------
 clone DayLife !
早上赖床了!7::15才起床!
7:30坐公交车
8:30到公司附近的公交站下车,经过路旁的早餐车时会顺便买好早餐一起带到公司
午餐在公司附近的小餐馆解决,然后在办公室的座椅上小憩一会
13:30开始了下午的工作
17:30准时下班
晚上休闲娱乐

三、该模式的设计原刚

1 克隆对象时对象的构造方法不执行
2 浅复制和深复制

四、使用场合

1 产生对彖的过程比较复杂,初始化需要许多资源
2 希望框架原型和产生对象分开时
3 同一个对象可能会供其他调用者同时调用访问时

希望本文所述对大家java程序设计有所帮助。

来源:https://blog.csdn.net/chengqiuming/article/details/70139285

标签:Java,原型模式
0
投稿

猜你喜欢

  • Java进阶知识之反射的概念与获取方法

    2023-12-09 19:09:14
  • Android WorkManager浅谈

    2023-03-24 11:26:46
  • Java超详细分析抽象类和接口的使用

    2021-06-09 12:19:05
  • SpringBoot整合MyCat实现读写分离的方法

    2022-03-05 23:37:45
  • JavaEE7+Websockets+GlassFish4打造聊天室

    2023-11-29 01:01:39
  • Winform项目中使用FastReport.Net报表控件

    2022-01-16 11:08:27
  • Java使用Redisson分布式锁实现原理

    2023-12-10 11:07:30
  • Android编程实现状态保存的方法分析

    2023-07-17 12:54:45
  • C#泛型方法在lua中表示的一种设计详解

    2022-08-24 20:03:12
  • SSM Mapper文件查询出返回数据查不到个别字段的问题

    2023-10-17 01:02:08
  • android 通知Notification详解及实例代码

    2023-06-26 12:11:42
  • Springboot上传文件时提示405问题及排坑过程

    2022-12-13 03:03:58
  • 详解如何在Android studio中更新sdk版本和build-tools版本

    2023-11-18 04:36:15
  • C#入门教程之集合ArrayList用法详解

    2022-04-30 06:32:13
  • SpringCloud:feign对象传参和普通传参及遇到的坑解决

    2023-02-17 11:18:58
  • 基于Android 实现图片平移、缩放、旋转同时进行

    2023-05-30 08:30:51
  • idea向System.getenv()添加系统环境变量的操作

    2022-11-13 19:35:51
  • java简单实现多线程及线程池实例详解

    2023-05-12 05:47:04
  • Java 事务注解@Transactional回滚(try catch、嵌套)问题

    2021-05-29 17:54:43
  • Android仿支付宝中余额宝的数字动画效果

    2021-10-17 08:32:54
  • asp之家 软件编程 m.aspxhome.com