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模式)是指:用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象 原型模式是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象,无需知道如何创建的 ...
 
随机推荐
- 为开发用途mac电脑瘦身
			
本文介绍的瘦身方法仅仅针对开发用途的mac电脑,在我们的开发过程中会发现随着编译的程序过多非常导致硬盘空间的占用率不断上升. 原文地址:http://blog.csdn.net/qqmcy/artic ...
 - 【E2LSH源代码分析】p稳定分布LSH算法初探
			
上一节,我们分析了LSH算法的通用框架,主要是建立索引结构和查询近似近期邻.这一小节,我们从p稳定分布LSH(p-Stable LSH)入手,逐渐深入学习LSH的精髓,进而灵活应用到解决大规模数据的检 ...
 - Spring笔记 - Bean xml装配
			
命名空间表 aop Provides elements for declaring aspects and for automatically proxying @AspectJannotated c ...
 - android随记
			
[Android]中国大部分城市地区的结构定义与按拼音排序 http://blog.csdn.net/sodino/article/details/6739522
 - const对象默认是static的,而不是extern的
			
const 和 static 变量,可以放在头文件中 const对象默认是static的,而不是extern的,所以即使放在头文件中声明和定义.多个cpp引用同一个头文件,互相也没有感知,所以不会导致 ...
 - perl学习(8) 控制:unless,until,next,redo,last
			
Perl中实现了所有C 的操作符! Perl力求代码最少! 1.1.unless unless的含义是:除非条件为真,否则执行块中的代码,和if正好相反 unless($fred=~ /^[A-Z_] ...
 - 略懂 MySQL字符集
			
本文虽说旨在明白.但若略懂亦可.毕竟诸葛孔明如是 只有基于字符的值才有所谓字符集的概念 某些字符集可能需要更多CPU.消费更多的内存和磁盘空间.甚至影响索引使用 这还不包括令人 ...
 - java实现指定文件扫描目录
			
package com.miss.time1230.io; import java.io.File; import java.util.Scanner; /** * @author MISS * 描述 ...
 - [cocos2d-x]HelloWorldDemo
			
实现一个demo,具备以下功能: 1.让几个字分别位于中间和四个角落. 2.中间的字体改变,并且带有闪烁功能. 3.单点触摸和多点触摸,并且能够实现滑动效果,滑动的话必须使用带有bool返回值的单点触 ...
 - 小型Mp3播放器
			
准备三张图片,名字分别为: play.pause.stop. 将一个名为Mp3的文件放入res/raw文件夹中. 在main.xml中: <LinearLayout xmlns:android= ...