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

网友投稿 253 2023-02-04


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

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

一、模式定义

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

二、模式举例

1 模式分析

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

2 故事情节分析图

3 原型模式静态建模

4 代码示例

4.1 原型建立

package com.prototype.pojo;

/**

* 日常生活类

*

* @author

*

*/

public class Dahttp://yLife 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到公司附近的公交站下车,http://经过路旁的早餐车时会顺便买好早餐一起带到公司");

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程序设计有所帮助。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Intellij idea远程debug连接tomcat实现单步调试
下一篇:java线程状态查询(jdk查看线程)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~