原型模式
来源:互联网 发布:换手率软件下载 编辑:程序博客网 时间:2024/05/29 08:29
通过一个原型对象,指明所有创建的对象的类型。之后复制这个原型对象,创建出更多类型的对象。
我们要生成的对象,必须实现可以‘克隆’自己的接口。复制实例对象,来创建一个新的实例。只要实现克隆自身的方法,就可以获得新对象。
使用原型模式创建对象比直接new一个对象在性能上要好的多,因为Object类的clone方法是一个本地方法,它直接操作内存中的二进制流,特别是复制大对象时,性能的差别非常明显。所以在需要重复地创建相似对象时可以考虑使用原型模式。比如需要在一个循环体内创建对象,假如对象创建过程比较复杂或者循环次数很多的话,使用原型模式不但可以简化创建过程,而且可以使系统的整体性能提高很多。
原型模式类似于工厂模式,但它没有了工厂模式中的抽象工厂和具体工厂的层级关系,代码结构更清晰和简单。
1.简单形式
客户:提出,我需要一个对象。
抽象原型角色:一个接口
具体原型角色:被复制的对象。
public interface Prototype{ //克隆自己。 public Object clone();}
public class ConcretePrototype1 implement Prototype{ public Prototype clone(){ Prototype prototype = new ConcretePrototype(); return prototype ; }}
客户端在使用过的时候:
Prototype prototype1 = new ConcretePrototype1(); ConcretePrototype1 concretePrototype1 = (ConcretePrototype1) prototype1.clone(); Prototype prototype2 = new ConcretePrototype2(); ConcretePrototype2 concretePrototype2 = (ConcretePrototype2) prototype2.clone();这是一种new的形式。也可以调用java的Object的clone方法。
abstract class Prototype implements Cloneable{ public Object clone(){ return super.clone(); }}
public class ConcretePrototype1 extends Prototype{ /** * 克隆自身方法 * @return * @throws CloneNotSupportedException */ public Object clone() throws CloneNotSupportedException{ return (ConcretePrototype1) super.clone(); }}这种是直接调浅克隆的方法。
浅克隆和深克隆:如果对象只有基本类型,深浅都一样。如果有对象属性,那么浅克隆是拷贝一份引用。而深克隆是把整个引用对象都拷贝过去。
一般深克隆都是通过序列化对象(Serializable),然后通过流的形式,写出,然后直接写入。获得一个新的对象,就是深克隆。
0 0
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型 模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 100条经典C语言笔试题目
- linux入门——指令&线上求助
- 主机空间教程须知
- Nodejs中控制异步的几种方法【陆续更新……】
- 区间最大/小值----RMQ算法
- 原型模式
- JQuery-min报错解决办法
- 基于Redis的伪流式计算统计PV
- 动态规划
- linux下postgresql的配置
- Windows下安装并设置Redis
- 微观SOA:服务设计原则及其实践方式(上篇)
- Ethernet 接收 数据过程
- Mybatis 鉴别器