软件编程
位置:首页>> 软件编程>> java编程>> Java使用原型模式展现每日生活应用案例详解

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

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

标签:Java,原型模式

本文实例讲述了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

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com