- 浏览: 178341 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (321)
- eclipse (4)
- idea (2)
- Html (8)
- Css (14)
- Javascript (8)
- Jquery (6)
- Ajax Json (4)
- Bootstrap (0)
- EasyUI (0)
- Layui (0)
- 数据结构 (0)
- Java (46)
- DesPattern (24)
- Algorithm (2)
- Jdbc (8)
- Jsp servlet (13)
- Struts2 (17)
- Hibernate (11)
- Spring (5)
- S2SH (1)
- SpringMVC (4)
- SpringBoot (11)
- WebService CXF (4)
- Poi (2)
- JFreeChart (0)
- Shiro (6)
- Lucene (5)
- ElasticSearch (0)
- JMS ActiveMQ (3)
- HttpClient (5)
- Activiti (0)
- SpringCloud (11)
- Dubbo (6)
- Docker (0)
- MySQL (27)
- Oracle (18)
- Redis (5)
- Mybatis (11)
- SSM (1)
- CentOS (10)
- Ant (2)
- Maven (4)
- Log4j (7)
- XML (5)
最新评论
1. 创建型模式 (2) 原型模式
详解Java中的clone方法:http://blog.csdn.net/zhangjg_blog/article/details/18369201
用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。
原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Prototype类需要具备以下两个条件: 1. 实现Cloneable接口。在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法。在java虚拟机中,只有实现了这个接口的类才可以被拷贝,否则在运行时会抛出CloneNotSupportedException异常。 2. 重写Object类中的clone方法。Java中,所有类的父类都是Object类,Object类中有一个clone方法,作用是返回对象的一个拷贝,但是其作用域protected类型的,一般的类无法调用,因此,Prototype类需要将clone方法的作用域修改为public类型。 原型模式是一种比较简单的模式,也非常容易理解,实现一个接口,重写一个方法即完成了原型模式。在实际应用中,原型模式很少单独出现。经常与其他模式混用,他的原型类Prototype也常用抽象类来替代。
package com.andrew.pattern0102.prototype.modal01; /** * 原型模式 * * @author andrew * @date 2018/05/14 */ public class Client { public static void main(String[] args) { ConcretePrototype cp = new ConcretePrototype(); for (int i = 0; i < 10; i++) { ConcretePrototype clonecp = (ConcretePrototype) cp.clone(); clonecp.show(); } } } class Prototype implements Cloneable { public Prototype clone() { Prototype prototype = null; try { prototype = (Prototype) super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return prototype; } } class ConcretePrototype extends Prototype { public void show() { System.out.println("原型模式实现类"); } }
原型模式实现类 原型模式实现类 原型模式实现类 原型模式实现类 原型模式实现类 原型模式实现类 原型模式实现类 原型模式实现类 原型模式实现类 原型模式实现类
使用原型模式创建对象比直接new一个对象在性能上要好的多,因为Object类的clone方法是一个本地方法,它直接操作内存中的二进制流,特别是复制大对象时,性能的差别非常明显。 使用原型模式的另一个好处是简化对象的创建,使得创建对象就像我们在编辑文档时的复制粘贴一样简单。 因为以上优点,所以在需要重复地创建相似对象时可以考虑使用原型模式。比如需要在一个循环体内创建对象,假如对象创建过程比较复杂或者循环次数很多的话,使用原型模式不但可以简化创建过程,而且可以使系统的整体性能提高很多。 原型模式的注意事项: 使用原型模式复制对象不会调用类的构造方法。因为对象的复制是通过调用Object类的clone方法来完成的,它直接在内存中复制数据,因此不会调用到类的构造方法。不但构造方法中的代码不会执行,甚至连访问权限都对原型模式无效。单例模式中,只要将构造方法的访问权限设置为private型,就可以实现单例。但是clone方法直接无视构造方法的权限,所以,单例模式与原型模式是冲突的,在使用时要特别注意。 深拷贝与浅拷贝。Object类的clone方法只会拷贝对象中的基本的数据类型(8种基本数据类型byte,char,short,int,long,float,double,boolean),对于数组、容器对象、引用对象等都不会拷贝,这就是浅拷贝。如果要实现深拷贝,必须将原型模式中的数组、容器对象、引用对象等另行拷贝。例如:
public class Prototype implements Cloneable { private ArrayList list = new ArrayList(); public Prototype clone(){ Prototype prototype = null; try{ prototype = (Prototype)super.clone(); prototype.list = (ArrayList) this.list.clone(); }catch(CloneNotSupportedException e){ e.printStackTrace(); } return prototype; } }
由于ArrayList不是基本类型,所以成员变量list,不会被拷贝,需要我们自己实现深拷贝,幸运的是java提供的大部分的容器类都实现了Cloneable接口。所以实现深拷贝并不是特别困难。 关于深拷贝和浅拷贝,会发生深拷贝的是java 的 8种基本数据类型和他们的封装类,至于String这个类型需要注意,它是引用数据类型,所以是浅拷贝,有疑惑请:
详解Java中的clone方法:http://blog.csdn.net/zhangjg_blog/article/details/18369201
发表评论
-
3. 行为型模式 (11) 解释器模式
2018-11-08 10:39 3743. 行为型模式 (11) 解释器模式 解释器模式(In ... -
3. 行为型模式 (10) 中介者模式
2018-11-08 09:56 3433. 行为型模式 (10) 中介者模式 中介者模式(Me ... -
3. 行为型模式 (9) 访问者模式
2018-11-07 14:30 3473. 行为型模式 (9) 访问者模式 访问者模式(Vis ... -
3. 行为型模式 (8) 状态模式
2018-11-07 09:13 4243. 行为型模式 (8) 状态模式 状态模式(State ... -
3. 行为型模式 (7) 备忘录模式
2018-11-06 14:27 4093. 行为型模式 (7) 备忘录模式 备忘录模式(Mem ... -
3. 行为型模式 (6) 命令模式
2018-11-06 11:40 3553. 行为型模式 (6) 命令模式 命令模式(Comma ... -
3. 行为型模式 (5) 责任链模式
2018-11-06 09:40 4073. 行为型模式 (5) 责任链模式 责任链模式(Cha ... -
3. 行为型模式 (4) 迭代子模式
2018-11-05 14:23 3273. 行为型模式 (4) 迭代 ... -
3. 行为型模式 (3) 观察者模式
2018-11-02 16:17 3983. 行为型模式 (3) 观察者模式 当对象间存在一对多 ... -
3. 行为型模式 (2) 模板方法模式
2018-11-02 09:26 3803. 行为型模式 (2) 模板方法模式 在模板模式(Te ... -
3. 行为型模式 (1) 策略模式
2018-11-01 09:23 4203. 行为型模式 (1) 策略模式 在策略模式(Stra ... -
2. 结构型模式 (3) 代理模式
2018-10-29 11:26 3502. 结构型模式 (3) 代理模式 代理模式(Proxy ... -
2. 结构型模式 (7) 享元模式
2018-10-30 13:27 3912. 结构型模式 (7) 享元模式 享元模式(Flywe ... -
2. 结构型模式 (6) 组合模式
2018-10-30 09:50 3422. 结构型模式 (6) 组合模式 组合模式(Compo ... -
2. 结构型模式 (2) 装饰者模式
2018-10-29 09:30 3922. 结构型模式 (2) 装饰器模式 装饰器模式(Dec ... -
2. 结构型模式 (5) 桥接模式
2018-10-30 09:11 3762. 结构型模式 (5) 桥接模式 桥接(Bridge) ... -
2. 结构型模式 (4) 外观模式
2018-10-29 14:20 3322. 结构型模式 (4) 外观模式 外观模式(Fac ... -
2. 结构型模式 (1) 适配器模式
2018-10-26 15:35 3662. 结构型模式 (1) 适配器模式 将一个类的接口转换 ... -
1. 创建型模式 (3) 建造者模式
2018-10-25 16:28 3461. 创建型模式 (3) 建造 ... -
1. 创建型模式 (1) 单例模式
2018-09-12 13:42 4081. 创建型模式 (3) 单例模式 单例模式是为确保一个 ...
相关推荐
即原型模式,提供一个已经存在的对象进行新对象创建的接口,一般情况下都是使用Clone接口。 此模式非常简单,简单的说就是复制多个当前对象供使用。Prototype模式允许一个对象再创建另外一个可定制的对象,根本...
JAVA-设计模式-创建型模式-原型模式
1.创建型模式:工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式。 2.结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。 4.行为型模式:模板方法模式、命令模式、...
6、原型模式(Prototype Pattern) 用意:通过拷贝创建一个新的对象
创建型: 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器模式(Adapter ...
设计模式_创建型_原型模式
原型模式(Prototype Pattern)作为创建型模式的一种,通过复制现有对象来创建新对象,从而避免了使用构造函数直接实例化对象的过程。
5.原型模式....................................................27 二.结构型模式....................................................32 6.适配器模式..................................................32...
5.原型模式....................................................27 二.结构型模式....................................................32 6.适配器模式..................................................32...
在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均... 这是第6节:Prototype原型模式创建型模式.part1
在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均... 这是第6节:Prototype原型模式创建型模式.part2
单例模式是保证一个类仅有一个实例,并自行提供访问该实例全局访问点的创建型模式。 原型模式用来解决对象的创建问题,它是指用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的对象 ...
5.原型模式....................................................27 二.结构型模式....................................................32 6.适配器模式..................................................32...
1. 创建型模式:创建型模式关注对象的创建过程,包括简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式和单例模式。这些模式可以帮助我们更灵活地创建对象,避免直接使用new关键字来创建对象,降低...
创建型: 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype)结构型: 6. 适配器模式(Adapter Pattern) 7. 桥接...
创建型: 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器模式(Adapter ...
这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高...
1. 创建型模式 工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern) 2. 结构型模式 适配器...
C#面向对象设计模式纵横谈(6):Prototype 原型模式(创建型模式) 体验课程
NULL 博文链接:https://jacky-dai.iteye.com/blog/2297214