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模式)是指:用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象 原型模式是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象,无需知道如何创建的 ...
随机推荐
- Boost 库Program Options--第二篇
程式執行參數處理函式庫:Boost Program Options(2/N) 前一篇已經大致解釋了 Boost Program Options 基本上的使用方法.而這一篇,則來細講一下選項描述(opt ...
- TCP/IP笔记 三.运输层(1)——UDP,TCP
1. 运输层 1.1 两种协议:TCP和UDP. (1)TCP:提供了一种可靠的数据传输服务,TCP是面向连接的,只有链接建立起来后才能通信. (2)UDP:是把数据直接发出去,而不管对方是不是在收信 ...
- 用 PS 复制权限
用 PS 复制权限 我们要把源计算机上的文件权限复制到目的计算机上. get-acl .\s.txt | Export-Clixml sddl.xml 把 s.txt 文件的权限保存到 sddl.xm ...
- ClassLoader载入指定的类需注意六个细节或报ClassNotFundEception异常总结
项目中,载入指定的类反射调用方法一直报类找不到,经过数百次的測试.对这样的问题有了一个又一次的认识,特总结.记录.分享例如以下: 1.路径中尽可能用"/"或者File.separa ...
- MFC:重绘Button,定制CButton,自画CPngButton,求赐教(各种bug包括性能bug)谢谢谢谢
[1.]CPngButton.h(资源是最后图片) #pragma once #include<atlimage.h> #define PNUM 19 #define PLAYTIME 1 ...
- 基于visual Studio2013解决C语言竞赛题之1042字符串比较
题目 解决代码及点评 /********************************************************************** ...
- android ble蓝牙开发略解
Android 蓝牙4.0开发 1. 权限和相关属性 “android:required="true"表示apk只有在具有bluetooth_le属性的系统里运行,这个4.3之前 ...
- QCompleter自动补全
知识永远是那么多,想到什么就总结什么,今天记录一下关于我对QComplete的一些小见解. 官方文档中叙述如下: 可以在任何Qt的窗口小部件中使用QCompleter提供自动补全功能,如 ...
- windows lwp 乱码问题
use LWP::UserAgent; use Encode; my $ua = LWP::UserAgent->new; $phone=$ARGV[0]; $cc=$ARGV[1]; $ua- ...
- .bash_profile与.bashrc和.profile的区分概念
在Linux系统中配置环境变量相关的文件主要有如下几个,很容易弄混的,这儿简单区分下: /etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/p ...