- 浏览: 764126 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (241)
- 个人思考 (1)
- 数据库 (5)
- java基础 (32)
- 软件工程 (2)
- zk开源框架 (15)
- 设计模式 (25)
- javascript (12)
- css (9)
- UML (2)
- CMMI软件需求 (3)
- CMMI软件设计 (2)
- CMMI软件实现 (1)
- CMMI软件测试 (1)
- 正则表达式 (4)
- 系统日志配置 (4)
- 应用服务器 (1)
- spring (7)
- XML (6)
- java web (10)
- Ajax (3)
- RichFaces (14)
- 问题 (1)
- 评论文章 (2)
- fushioncharts (2)
- MAVN (4)
- jquery (26)
- Ext js学习 (2)
- 学习心得 (2)
- CSS兼容问题 (3)
- XSL-FOP (1)
- Quartz (0)
- OSGI (1)
- spring--security (6)
- apache tools (1)
- eclispe 小技巧 (2)
- Ant (1)
- 杂记 (1)
- spring3系列 (5)
- java cache (4)
- EffectiveJava (2)
- 代码重构 (0)
最新评论
-
psz6696:
可以说是超级简单的Demo了,可惜没有演示设值注入和构造注入两 ...
模拟spring中的ClassPathXmlApplicationContext类的实现 -
ziyourJava:
[flash=200,200][img][url][list] ...
spring security进级篇 V 自定义标签控制显示 -
ztw1122:
...
zk组件开发指南(目录) -
zjysuv:
容我说一句 在座的各位都是垃圾 spring 3.2以后的@C ...
三. spring mvc 异常统一处理 -
chengwu1201:
二 基于Spring的异常体系处理
前面java基础中介绍了clone和序列化,结合clone和序列化的知识,今天学习下原型模式。
定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,
工作原理:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。
适用性:当要实例化的类是在运行时刻指定时,例如,通过动态装载;
或者为了避免创建一个与产品类层次平行的工厂类层次时;
或者当一个类的实例只能有几个不同状态组合中的一种时。
建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。
因为我们编程要面向接口编程,所以这里我们为原型模式的具体实现类抽取出一个接口。
1、采用序列化的方式实现
/** * * @功能 :工作经历 * @创建人 gao_jie * @创建日期 May 11, 2009 * @版本 1.0 * */ public class WorkExperience implements Serializable{ private String workdate;// 工作时间 private String workcompany;// 工作的公司 /** * @return */ public String getWorkdate() { return workdate; } /** * @param workdate */ public void setWorkdate(String workdate) { this.workdate = workdate; } /** * @return */ public String getWorkcompany() { return workcompany; } /** * @param workcompany */ public void setWorkcompany(String workcompany) { this.workcompany = workcompany; } } /** * * @功能 原型模式抽象接口 * @创建人 gao_jie * @创建日期 Jun 27, 2009 * @版本 1.0 * */ public interface Iprototype extends Cloneable, Serializable{ /** * 设置用户个人信息 * * @param name * @param sex */ public abstract void setPersonInfo(String sex, String age); /** * 设置工作经历 * * @param name * @param sex */ public abstract void setWorkExperience(String workdate, String company); /** * 显示结果 */ public abstract void display(); /** * @return */ public Object clone(); } /** * * @功能 原型模式具体实现 * @创建人 gao_jie * @创建日期 May 11, 2009 * @版本 1.0 * */ public class ConcretePrototype implements Iprototype { private String name;// 姓名 private String sex;// 性别 private String age;// 年龄 private WorkExperience Work;// 工作经历 /** * 构造函数 * * @param name */ public ConcretePrototype(String name) { this.name = name; this.Work = new WorkExperience(); } /* (non-Javadoc) * @see eight.prototypedeepcopy2.Prototype#setPersonInfo(java.lang.String, java.lang.String) */ public void setPersonInfo(String sex, String age) { this.sex = sex; this.age = age; } /* (non-Javadoc) * @see eight.prototypedeepcopy2.Prototype#setWorkExperience(java.lang.String, java.lang.String) */ public void setWorkExperience(String workdate, String company) { this.Work.setWorkdate(workdate); this.Work.setWorkcompany(company); } /* (non-Javadoc) * @see eight.prototypedeepcopy2.Prototype#display() */ public void display() { System.out.println("名字:" + name); System.out.println("性别:" + sex); System.out.println("年龄:" + age); System.out .println("工作经历:" + Work.getWorkdate() + Work.getWorkcompany()); } /* * (non-Javadoc) * * @see java.lang.Object#clone() */ public Object clone() { try { ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(this); // 将流序列化 ByteArrayInputStream bis = new ByteArrayInputStream(bos .toByteArray()); ObjectInputStream ois = new ObjectInputStream(bis); return ois.readObject(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return null; } } /** * * @功能;客户端测试类 * @创建人 gao_jie * @创建日期 May 11, 2009 * @版本 1.0 * */ public class Client { /** * @param args */ public static void main(String[] args) { Iprototype a = new ConcretePrototype("大鸟"); a.setPersonInfo("男", "29"); a.setWorkExperience("2009-12-19", "中创软件"); Iprototype b = (ConcretePrototype)a.clone(); b.setPersonInfo("女", "25"); b.setWorkExperience("2008-12-13", "中间件"); a.display(); b.display(); } } 客户端显示结果: 名字:大鸟 性别:男 年龄:29 工作经历:2009-12-19中创软件 名字:大鸟 性别:女 年龄:25 工作经历:2008-12-13中间件
2、采用深度复制方式实现
** * * @功能 :工作经历 * @创建人 gao_jie * @创建日期 May 11, 2009 * @版本 1.0 * */ public class WorkExperience implements Cloneable{ private String workdate;// 工作时间 private String workcompany;// 工作的公司 /** * @return */ public String getWorkdate() { return workdate; } /** * @param workdate */ public void setWorkdate(String workdate) { this.workdate = workdate; } /** * @return */ public String getWorkcompany() { return workcompany; } /** * @param workcompany */ public void setWorkcompany(String workcompany) { this.workcompany = workcompany; } public Object clone() throws CloneNotSupportedException { return super.clone(); } } /** * * @功能 原型模式抽象接口 * @创建人 gao_jie * @创建日期 Jun 27, 2009 * @版本 1.0 * */ public interface Iprototype extends Cloneable, Serializable { /** * 设置用户个人信息 * * @param name * @param sex */ public abstract void setPersonInfo(String sex, String age); /** * 设置工作经历 * * @param name * @param sex */ public abstract void setWorkExperience(String workdate, String company); /** * 显示结果 */ public abstract void display(); /** * @return */ public Object clone() throws CloneNotSupportedException; } /** * * @功能 原型模式具体实现 * @创建人 gao_jie * @创建日期 May 11, 2009 * @版本 1.0 * */ public class ConcretePrototype implements Iprototype { private String name;// 姓名 private String sex;// 性别 private String age;// 年龄 private WorkExperience Work;// 工作经历 /** * 构造函数 * * @param name */ public ConcretePrototype(String name) { this.name = name; this.Work = new WorkExperience(); } /* * (non-Javadoc) * * @see eight.prototypedeepcopy2.Prototype#setPersonInfo(java.lang.String, * java.lang.String) */ public void setPersonInfo(String sex, String age) { this.sex = sex; this.age = age; } /* * (non-Javadoc) * * @see eight.prototypedeepcopy2.Prototype#setWorkExperience(java.lang.String, * java.lang.String) */ public void setWorkExperience(String workdate, String company) { this.Work.setWorkdate(workdate); this.Work.setWorkcompany(company); } /** * @return */ public WorkExperience getWork() { return Work; } /* * (non-Javadoc) * * @see eight.prototypedeepcopy2.Prototype#display() */ public void display() { System.out.println("名字:" + name); System.out.println("性别:" + sex); System.out.println("年龄:" + age); System.out .println("工作经历:" + Work.getWorkdate() + Work.getWorkcompany()); } /* * (non-Javadoc) * * @see java.lang.Object#clone() */ public Object clone() throws CloneNotSupportedException { ConcretePrototype cprottotype=(ConcretePrototype)super.clone(); Work=(WorkExperience) cprottotype.getWork().clone(); return cprottotype; } } 测试类 /** * * @功能;客户端测试类 * @创建人 gao_jie * @创建日期 May 11, 2009 * @版本 1.0 * */ public class Client { /** * @param args */ public static void main(String[] args) { Iprototype a = new ConcretePrototype("大鸟"); a.setPersonInfo("男", "29"); a.setWorkExperience("2009-12-19", "中创软件"); Iprototype b = null; try { b = (ConcretePrototype)a.clone(); } catch (CloneNotSupportedException e) { // TODO Auto-generated catch block e.printStackTrace(); } b.setPersonInfo("女", "25"); b.setWorkExperience("2008-12-13", "中间件"); a.display(); b.display(); } } 测试结果: 名字:大鸟 性别:男 年龄:29 工作经历:2009-12-19中创软件 名字:大鸟 性别:女 年龄:25 工作经历:2008-12-13中间件
两种方式实现设计模式中的原型模式。
发表评论
文章已被作者锁定,不允许评论。
-
面向对象设计原则-------总结
2015-07-14 10:55 0单一职能原则 ----- 设计类时,尽量功能单一,粒度合 ... -
MVC设计模式理解
2009-11-16 22:11 2085常常说MVC设计模式,今天抽空整理下,感觉模式这东 ... -
面向对象设计的原则---------迪米特原则
2009-10-15 21:15 3180迪米特原则(Law of Demeter) 1、迪米特原则的 ... -
面向对象设计的原则------接口隔离原则
2009-10-12 15:50 2809接口隔离原则(Interface ... -
面向对象设计的原则------依赖倒置原则
2009-10-11 18:27 3639依赖倒置原则(Dependence Inversion Pri ... -
面向对象设计的原则------里氏代换原则
2009-10-11 14:21 2638里氏代换原则(Liskov Sub ... -
面向对象设计的原则------开闭原则
2009-10-10 23:09 2474开闭原则(Open-Closed Prin ... -
面向对象设计的原则------单一职责原则
2009-10-09 20:36 3274学习设计模式,自然会涉及面向对象的设计原则,面向对 ... -
观察者模式
2009-08-04 22:14 1183gaojie -
组合模式-------树形模式
2009-08-03 20:42 22631、组合模式定义 ... -
命令模式
2009-08-02 14:06 18441、Commad模式是一种对象行为模式,它可以对发送者(se ... -
适配器和外观模式的区别
2009-08-01 18:23 1428ok -
适配器模式
2009-08-01 14:43 1193适配器模式通俗的说是将两个联系不密切的类或类与接口通过另一个类 ... -
门面模式(外观模式)
2009-07-29 22:49 14841、外观模式 为子系统的一组接口提供一个一致的界 ... -
简单工厂模式、代理模式、策略模式如此相似
2009-07-21 22:34 4128最近,一直在看设计模式,感觉简单工厂模式、代理模式、策略模式、 ... -
策略模式
2009-07-19 23:01 1365今天学习策略模式。策略模式是这个样子的。定义一个接 ... -
jdbcTemplate分页封装
2009-07-16 09:17 41441.JdbcTemplateExtend.java publi ... -
单例模式完全剖析
2009-07-07 21:01 1344概要 单例模式是最简单的设计模式之一,但是对于Jav ... -
DAO设计模式
2009-07-04 11:40 2238虽然DAO模式已经有了好多的成熟的框架,但它仍然是 ... -
工厂模式与DAO模式
2009-07-02 21:17 4422工厂模式是设计模式中较简单的模式,但在项目的开发过 ...
相关推荐
原型模式是设计模式中的一种,它是Java 23种经典设计模式之一,主要用来提高对象创建的效率。在原型模式中,我们通过复制或克隆一个已经存在的对象来创建新的对象,而不是通过构造函数来创建。这种方法尤其适用于当...
原型模式(Prototype Pattern)是软件设计模式中的一种结构型模式,它的主要目的是通过复制已有对象来创建新对象,从而减少创建新对象的成本。在原型模式中,类的实例化过程被替换为对已有实例的克隆操作,尤其适用...
原型模式(Prototype Pattern)是其中一种行为设计模式,主要用于对象创建。它通过复制已有对象来创建新对象,而不是通过传统的构造函数来创建。在Java中,原型模式可以有效地提高性能,特别是在创建复杂对象时。 #...
本文将深入探讨Android设计模式中的“原型模式”(Prototype Pattern),并结合提供的"prototype"压缩包中的示例代码进行解析。 原型模式是一种创建型设计模式,它的主要思想是通过复制已有对象来创建新对象,而...
原型模式(Prototype Pattern)是一种创建型设计模式,它允许我们通过复制现有的对象来创建新对象,而无需知道具体创建过程的细节。这种模式的核心在于,它提供了一种对象克隆的简便方法,使得对象的创建过程对用户...
原型模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在原型模式中,一个对象可以被克隆以创建新对象,而无需知道具体的创建细节。这种模式在需要重复创建相似对象时非常有用,避免了每次创建新对象时都...
本篇文章将深入探讨“原型模式(Prototype)”这一经典的设计模式,它是面向对象设计的一个重要概念,尤其在C++编程中有着广泛的应用。 原型模式是一种创建型设计模式,它的核心思想是通过复制已有对象来创建新对象,...
原型模式(Prototype Pattern)是其中一种行为设计模式,它允许我们通过复制现有对象来创建新对象,而不是通过传统方式实例化新对象。这一模式尤其适用于创建复杂或昂贵的对象,因为它提供了对象克隆的能力,从而...
### Java设计模式之原型模式深度解析 #### 模式动机 在面向对象编程的世界里,对象的创建往往伴随着复杂的逻辑处理。特别是在某些场景下,对象的构造过程可能涉及大量资源的消耗,例如数据库连接、文件读写等。在...
基于Java实现的23种设计模式Demo,抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式、外观模式、适配器模式等 Java设计模式共有23种,分别为:抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式...
ava常用设计模式-原型模式 原型模式(Prototype Pattern)是一种创建型设计模式,允许通过复制现有对象来创建新对象,而不是通过实例化类来创建新对象。在需要创建大量相似对象时非常有用,它可以避免重复创建对象...
【设计模式之原型模式】 设计模式是软件工程中的一种最佳实践,是对在特定上下文中反复出现的软件设计问题的解决方案。原型模式属于对象创建型模式,它的主要思想是通过复制已有对象来创建新对象,降低了类的实例化...
设计模式 的分类 总体来说设计模式分为三大类: 创建型模式(5): 工厂方法模式 、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式(7): 适配器模式、装饰器模式、代理模式、外观模式、桥接模式、...
C#23种设计模式样例代码和UML图等 创建型模式(抽象工厂模式、工厂方法模式、单例模式、建造者模式、原型模式); 行为型模式(策略模式、 迭代器模式、原型模式、职责链模式、 模板方法、 命令模式、 解释器模式、 ...
JDK中许多类和方法都使用了设计模式,这些模式的应用帮助实现了代码的高内聚、低耦合,提高了代码的可维护性和扩展性。下面介绍几种常见的设计模式及其在JDK中的应用实例: a) 抽象工厂模式(AbstractFactory) ...
本资料集包含了多种重要的前端设计模式,如工厂模式、原型模式和构造器模式,下面将详细阐述这些模式的核心概念和应用。 1. 工厂模式: 工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,通过抽象出...