`
cakin24
  • 浏览: 1388347 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

原型模式应用——展现每日生活

阅读更多

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

 

二 模式举例
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 同一个对象可能会供其他调用者同时调用访问时

  • 大小: 27.5 KB
  • 大小: 50.7 KB
分享到:
评论

相关推荐

    设计模式——原型模式

    原型模式(Prototype Pattern)是一种创建型设计模式,它允许我们通过复制现有的对象来创建新对象,而无需知道具体创建过程的细节。这种模式的核心在于,它提供了一种对象克隆的简便方法,使得对象的创建过程对用户...

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

    public class PrototypeDemo { public static void main(String[] args) { // 创建原型对象 DayLife original = new DayLife(); original.setGetUp("6:30起床"); original.setByBus("7:00坐公交"); original....

    原型模式实践代码

    原型模式是一种设计模式,主要应用于软件工程领域,用于创建重复的对象,而无需再次进行实例化。在Java、C#等面向对象的语言中,原型模式通过实现`Cloneable`接口或使用序列化机制来实现对象的复制。在这个"原型模式...

    iOS设计模式之原型模式

    本文将深入探讨一种常见的设计模式——原型模式(Prototype Pattern),并结合具体的iOS应用场景进行解析。 原型模式是一种创建型设计模式,它的主要思想是通过复制已有对象来创建新对象,而不是通过构造函数来创建...

    原型模式PPT文档

    1. **模式结构**:原型模式主要由两个角色构成——原型(Prototype)接口和具体原型(Concrete Prototype)。原型接口定义了克隆操作,而具体原型实现该接口,提供实际的克隆功能。 2. **工作原理**:首先,客户端...

    设计模式之原型模式

    3. **深拷贝与浅拷贝**:原型模式中的拷贝分为两种类型——深拷贝和浅拷贝。深拷贝会创建原始对象的所有属性的新副本,包括引用类型。而浅拷贝只复制对象本身,不复制引用的对象。 ### 实现原型模式的步骤 1. 定义...

    原型设计大师——Axure站点地图

    在互联网产品设计中,原型设计是构建用户界面和用户体验的基础。Axure作为一款专业的原型设计工具,它的站点地图功能是构建原型不可或缺的一部分。站点地图以树状结构呈现,使设计者能够清晰地规划和管理产品功能...

    Android设计模式原型模式应用简单Demo

    在这个“Android设计模式原型模式应用简单Demo”中,我们将探讨如何在Android环境中利用原型模式来简化对象的创建。 首先,原型模式的基本思想是通过创建一个原型对象并用它来为其他新对象初始化结构。在Android中...

    设计模式之原型模式Java实现和类设计图

    **正文** 设计模式是软件开发中的重要概念,它代表了在特定上下文中解决常见问题的最佳实践。原型模式(Prototype Pattern)是其中一种行为设计模式...结合UML类设计图,可以帮助我们更好地理解和设计原型模式的应用。

    java 原型模式

    在实际应用中,原型模式常用于配置对象的复制,例如在游戏开发中复制角色、在数据库连接池中复制连接配置等场景。使用原型模式时,需要注意合理设计类的构造器和`clone()`方法,确保拷贝行为符合预期。 总结起来,...

    原型模式(ProtoType)C#应用案例

    5. **C#中的原型模式应用**: 在案例中,可能有一个基类`Prototype`,它实现`ICloneable`接口并定义了`Clone()`方法。然后,具体的原型对象如`ConcretePrototype1`和`ConcretePrototype2`继承自`Prototype`,实现各自...

    设计模式的原型模式的例子

    下面我们将深入探讨原型模式的实现和应用场景。 ### 原型模式的实现 1. **浅复制**:只复制对象本身,而不复制它引用的对象。这意味着如果原对象包含对其他对象的引用,那么这些引用在副本中仍然指向原来的对象。 ...

    实验六:原型模式.rar

    原型模式是其中一种经典的设计模式,它属于创建型模式,主要应用于对象复制或克隆场景。在这个实验六:“原型模式.rar”中,我们将深入理解并实践如何在Java中实现原型模式。 首先,原型模式的核心思想是通过拷贝已...

    Java设计模式——原型模式

    Java设计模式——原型模式 原型模式Java设计模式——原型模式概念使用场景Java里的克隆代码理解prototype(原型)问题总结优缺点模型优点模型缺点 概念 ​ 原型模式是创建型模式的最后一种,讲到原型模式就不得不提到...

    Java 23种设计模式08原型模式.pdf

    以下是一个简单的原型模式应用实例——邮件复制,该实例演示了如何使用浅克隆技术来复制邮件对象。 ```java // 定义一个邮件类,实现Cloneable接口 public class Email implements Cloneable { private String ...

    android设计模式之原型模式

    在Android应用中,原型模式可能应用于各种场景。例如,当我们需要保存和恢复Activity的状态时,可以使用原型模式复制当前界面的状态,然后在恢复时快速重建。另一个例子是在配置多个相似的ListView或RecyclerView时...

    创建型模式之原型模式(Prototype Pattern)

    **原型模式(Prototype Pattern)详解** 在软件设计中,原型模式是一种创建型设计模式,它提供了一种通过复制已有对象来创建新对象的方式,避免了重复的构造过程,提高了代码的效率和可维护性。原型模式的核心思想...

    设计模式C++学习之原型模式(Prototype)

    本篇文章将深入探讨“原型模式(Prototype)”这一经典的设计模式,它是面向对象设计的一个重要概念,尤其在C++编程中有着广泛的应用。 原型模式是一种创建型设计模式,它的核心思想是通过复制已有对象来创建新对象,...

    设计模式——GFour

    创建型模式主要关注对象的创建过程,包括单例模式、工厂模式、抽象工厂模式、建造者模式和原型模式。它们旨在提供一种方式来封装对象的创建,使得系统对对象的实例化过程更加灵活,同时降低类间的耦合度。 结构型...

Global site tag (gtag.js) - Google Analytics