Java使用原型模式展现每日生活应用案例详解
作者:chengqiuming 发布时间:2023-03-08 04:27:08
标签:Java,原型模式
本文实例讲述了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程序设计有所帮助。
来源:https://blog.csdn.net/chengqiuming/article/details/70139285
0
投稿
猜你喜欢
- 多播委托简介每一个委托都是继承自MulticastDelegate,也就是每个都是多播委托。带返回值的多播委托只返回最后一个方法的值多播委托
- 由于maven 使用上手很容易所以很多时候可以囫囵吞枣能够使用就可以了,由于作者最近在做的持续集成的代码扫描的时候,发现私有云里面大型工程m
- 1.springBoot的依赖确定项目中包含可以注解的依赖<dependency> <group
- 本文实例讲述了java实现ArrayList根据存储对象排序功能。分享给大家供大家参考,具体如下:与c++中的qsort的实现极为相似,构建
- 本文所述为C#实现根据指定容器和控件名字获得控件的方法,在进行C#应用程序设计时有一定的借鉴价值。分享给大家供大家参考借鉴。具体实现方法如下
- 一、定义一个配置类,自定义RedisTemplate的序列化方式@Configurationpublic class RedisConfig
- 1、什么是序列化与反序列化?序列化:指把堆内存中的 Java 对象数据,通过某种方式把对象存储到磁盘文件中或者传递给其他网络节点(在网络上传
- 1 前言在 Springboot 中,异步任务和定时任务是经常遇到的处理问题方式,为了能够用好这两项配置,不干扰正常的业务,需要对其进行异步
- Java事件处理机制和适配器最重要的是理解事件源,监视器,处理事件的接口的概念。1.事件源:是能够产生时间的对象都可以叫事件源,比如文本框,
- 对象是对类的实例化。对象具有状态和行为,变量用来表明对象的状态,方法表明对象所具有的行为。Java 对象的生命周期包括创建、使用和清除。一、
- 今天有朋友问我Struts2中Action必须实现execute方法吗?顺利的回答出来了。其实分两种情况:1)如果你的Action类是继承自
- 一、简介当我们没有在子类构造函数中写上 base(),默认会先调用父类中无参的构造函数,再调用子类。当在有参构造函数后写上base时,只调用
- 由Lombok的@AllArgsConstructor注解引发的错误需求:在Service实现中写了一个方法调用第三方接口同步数据。 功能代
- 这篇文章主要介绍了java实现上传文件类型检测过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- 微信公众平台(map.weixin.qq.com)/开放平台(open.weixin.qq.com)/商户平台(pay.weixin.qq.
- 命令行编译java文件import java.util.*;public class shuchu{ public
- 在网站开发中经常遇到级联数据的展示,比如选择城市的时候弹出的省市县选择界面。很多前端制作人员习惯于从JSON中而不是从数据库中获
- 一、前言null与NULL不都是表示空值吗?这有什么值得深入讨论的的?首先你在编写Java代码时使用过NULL吗?大概用IDE用习惯了,自动
- 概念介绍不同的引用类型,主要体现的是对象不同的可达性(reachable)状态和对垃圾收集的影响。01. 强引用这个就
- IO流基本概念IO流用来处理设备之间的数据传输Java对数据的操作是通过流的方式Java用于操作流的对象都是在IO包上流按操作数