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模式)是指:用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象 原型模式是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象,无需知道如何创建的 ...
随机推荐
- 分享非常有用的Java程序 (关键代码)(六)---解析/读取XML 文件(重要)
原文:分享非常有用的Java程序 (关键代码)(六)---解析/读取XML 文件(重要) XML文件 <?xml version="1.0"?> <student ...
- cmake总结
无论生活还是工作上,做过的事,需要总结下. 接触cmake,一般都会看一本书 <<cmake 实践>>. 这是cmake的入门书.我就不多说了. 下面说一下我对部分cmake命 ...
- Haxe UI框架StablexUI的使用备忘与心得(序)
最近在手上的项目开发中,从原来的使用Sprite全手写UI,开始逐步使用StablexUI,感觉还是相当不错的,强大.高效.轻量.灵活,非常适应我当前的实际需求. 不过作为小种语言的一个小众第三方开源 ...
- db2常用命令(详解)大全
近一年来在项目开发中使用到了IBM的DB2 9.1的数据库产品,跟Oracle相比一些命令有很大的区别,而它最大的功能是支持 xml存储.检索机制,通过XPath进行解析操作,使开发人员免于 ...
- Matlab,Visio等生成的图片的字体嵌入问题解决方法
确保所有字体嵌入,是生成高质量学术论文的必要条件.但是在Windows下,总会遇到Matlab或Visio生成字体没有嵌入的问题,当然这个问题的解决办法有很多(例如,对于Visio可以这样做:直接拷贝 ...
- POJ 1042 Gone Fishing (贪心)(刘汝佳黑书)
Gone Fishing Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 30281 Accepted: 9124 Des ...
- Swift - 使用CGBlendMode改变UIImage颜色
类似于PS,Swift中也可对图片UIImage进行图层混合(blending),而且提供了相当丰富的混合模式(blendMode).本文先介绍使用其中的kCGBlendModeDestination ...
- Ruby on Rails 實戰聖經阅读(三)
由于是1.8.x:圣经的1.9.3差太多,所以另外按1.8.X来创建hello world 第一個Hello World!! 1. 创建项目rails -d mysql first 2.创建控制器 ...
- MVC简单分页
对Car汽车表分页 实现简单分页,放在这里方便查看回顾,自定义每页几条有点问题,有待完善······ 1.新建mvc项目 2.添加linq to sql 数据库连接 3.添加CarBF类 using ...
- Html input 限制输入中英文字符,及字符数量统计
margin:20px 0px 0px; font-family:Arial; color:rgb(51,51,51)"> 验证用户名的一个例子: html: <input ty ...