Java原型模式之基础
一、是什么?
定义:用原型实例指定创建对象的种类,而且通过拷贝这些原型创建新的对象。(官方定义)
原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。
Prototype类须要具备下面两个条件:
1.实现Cloneable接口。
在java语言有一个Cloneable接口,它的作用仅仅有一个,就是在执行时通知虚拟机能够安全地在实现了此接口的类上使用clone方法。在java虚拟机中,仅仅有实现了这个接口的类才干够被拷贝,否则在执行时会抛出CloneNotSupportedException异常。
2.重写Object类中的clone方法。
Java中全部类的父类都是Object类。Object类中有一个clone方法。作用是返回对象的一个拷贝。可是其作用域protected类型的。一般的类无法调用,因此。Prototype类须要将clone方法的作用域改动为public类型。
原型模式是一种比較简单的模式,也非常easy理解。实现一个接口,重写一个方法即完毕了原型模式。在实际应用中,原型模式非常少单独出现。
经常与其它模式混用,它的原型类Prototype也经常使用抽象类来替代。
类型:创建型模式
二、何时用?
有的时候,创建一个对象可能会很耗时,比方对象须要从远程数据库中获取数据来填充又或者创建对象须要读取硬盘文件。
此时,假设已经有了一个对象。再创建对象时,不须要提供专门的new()操作,而是採用复制现有对象的方法,就能够高速完毕对象的创建,这无疑是一种很有效的方式。
三、怎么用?
classPrototype implements Cloneable {
public Prototype clone(){
Prototype prototype = null;
try{
prototype =(Prototype)super.clone();
}catch(CloneNotSupportedException e){
e.printStackTrace();
}
return prototype;
}
}
class ConcretePrototype1 extends Prototype{
public void show(){
System.out.println("原型模式实现类1");
}
}
class ConcretePrototype2 extends Prototype{
public void show(){
System.out.println("原型模式实现类2");
}
}
publicclass Client {
public static void main(String[] args){
ConcretePrototype cp = newConcretePrototype();
for(int i=0; i< 10; i++){
ConcretePrototype clonecp =(ConcretePrototype)cp.clone();
clonecp.show();
}
}
}<span style="font-family: SimSun; font-size: 14pt; background-color: rgb(255, 255, 255);"> </span>
四、优缺点:
长处:
1.能够高速创建非常多同样或相似的对象,简化对象的创建过程(由于Object类的clone方法是一个本地方法,它直接操作内存中的二进制流,特别是复制大对象时,性能的区别非常明显。
)
2.保存对象的中间状态
3.扩展性好:动态添加降低产品类。
4.简化了创建结构
缺点:每个类必须配备一个克隆方法。因此对已有类进行改造比較麻烦。须要改动其源码,而且在实现深克隆是须要编写较为复杂的代码。
五、总结
以上就是对原型模式基础知识的一个解说,仅仅有对这些基础知识有了了解才会将它进一步优化。让它发挥更大的价值。
那么下一篇就会更深一步的介绍原型模式之浅拷贝和深拷贝。
Java原型模式之基础的更多相关文章
- Java 原型模式(克隆模式)
Java 的设计模式有 23 种,前段时间小编已经介绍了单例模式,由于我们在学习 Spring 的时候在 bean 标签的学习中碰到了今天要讲的原型模式,那么小编就已本文来介绍下原型模式. 原型模 ...
- Java原型模式
原型模式 原型模式也称克隆模式.原型模式jian ming zhi yi,就是先创造出一个原型,然后通过类似于Java中的clone方法,对对象的拷贝,克隆类似于new,但是不同于new.new创造出 ...
- Java原型模式之浅拷贝-深拷贝
一.是什么? 浅拷贝:对值类型的成员变量进行值的复制,对引用类型的成员变量仅仅复制引用,不复制引用的对象 深拷贝:对值类型的成员变量进行值的复制,对引用类型的成员变量也进行引用对象的复制 内部机制: ...
- Java 原型模式
http://www.cnblogs.com/itTeacher/archive/2012/12/02/2797857.html http://www.cnblogs.com/java-my-life ...
- 重学 Java 设计模式:实战原型模式
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 老板你加钱我的代码能飞 程序员这份工作里有两种人:一类是热爱喜欢的.一类是仅当成工作 ...
- 【设计模式】Java设计模式精讲之原型模式
简单记录 - 慕课网 Java设计模式精讲 Debug方式+内存分析 & 设计模式之禅-秦小波 文章目录 1.原型模式的定义 原型-定义 原型-类型 2.原型模式的实现 原型模式的通用类图 原 ...
- 设计模式总结篇系列:原型模式(Prototype)
首先对原型模式进行一个简单概念说明:通过一个已经存在的对象,复制出更多的具有与此对象具有相同类型的新的对象. 在理解Java原型模式之前,首先需要理解Java中的一个概念:复制/克隆. 在博文< ...
- Java描述设计模式(05):原型模式
本文源码:GitHub·点这里 || GitEE·点这里 一.原型模式简介 1.基础概念 原型模式属于对象的创建模式.通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出 ...
- 深度分析:java设计模式中的原型模式,看完就没有说不懂的
前言 原型模式(Prototype模式)是指:用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象 原型模式是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象,无需知道如何创建的 ...
随机推荐
- Android Studio创建库项目及引用
Android Studio创建库项目其实创建的是在主项目下创建Module模块,这个Module模块创建的时候选择库项目模式. 为什么要这样处理呢?因为在Android Studio中一个WorkS ...
- JVM调优总结(十)-调优方法
JVM调优工具 Jconsole,jProfile,VisualVM Jconsole : jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用.对垃圾回收算法有很详细的跟踪.详细说明参考这里 ...
- 130825组队赛-Regionals 2012, North America - East Central NA
A.Babs' Box Boutique 一道简单的dfs搜索题,需要两两比较,然后搜到底,得到最大值就行了.比赛时队友写的,我只负责debug..赛后自己写的.. #include<iostr ...
- 区间dp模型之括号匹配打印路径 poj(1141)
题目链接:Brackets Sequence 题目描写叙述:给出一串由'(')'' [ ' ' ] '组成的串,让你输出加入最少括号之后使得括号匹配的串. 分析:是区间dp的经典模型括号匹配.解说:h ...
- USB中CDC-ECM的了解和配置
USB中典型类及子类: 类别 解释 子类 典型应用 IC芯片 备注 UVC 视频类 免驱USB摄像头 CDC 通讯类 RNDIS ECM(p24) 免驱USB网卡 RTL8152B EEM ..... ...
- 主题:Java WebService 简单实例
链接地址:主题:Java WebService 简单实例 http://www.iteye.com/topic/1135747 前言:朋友们开始以下教程前,请先看第五大点的注意事项,以避免不必要 ...
- Spring Cloud Config
Spring Cloud Config provides server and client-side support for externalized configuration in a dist ...
- php连接oracle及简单操作
使你的php支持oracle,按照以下步骤即可: 1.安装php环境,找一下appserv或者xampp,一键安装,很方便 2.把php的ext目录下的php_oci8.dll拷到system32目录 ...
- linux-0.11抠代码-bootsect
//bootfun.s .global asm_message .global asm_memmove .global asm_readsector .global asm_checkLBA .cod ...
- MSSQL、C# 、Winform、ASP.NET - 数据库备份与还原模块
数据库备份还原类: using System; using System.Collections.Generic; using System.Linq; using System.Text; usin ...