首页 > 编程 > Java > 正文

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

2019-11-26 09:59:24
字体:
来源:转载
供稿:网友

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

一、模式定义

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

二、模式举例

1 模式分析

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

2 故事情节分析图

3 原型模式静态建模

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算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表