前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[设计模式]原型模式

[设计模式]原型模式

作者头像
静默虚空
发布2018-01-05 14:36:07
5260
发布2018-01-05 14:36:07
举报

简介

原型模式 (Prototype)用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

原型模式是一种对象创建型模式可参考 设计模式 创建型模式)。

结构

图-原型模式结构图

Prototype:声明一个克隆自身的接口。 ConcretePrototype:实现克隆自身的具体操作。 Client:调用 Prototype 来克隆自身,从而创建一个新对象。

动机

当要实例化的类是在运行时刻指定时,例如,通过动态装载。 为了避免创建一个与产品类层次平行的工厂类层次时。 当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。 

浅拷贝与深拷贝

浅拷贝是指当对象的字段值被复制时,字段引用的对象不会被复制。 例如:如果一个对象有一个指向字符串的字段,并且我们对该对象做了一个浅拷贝,那麽两个对象将引用同一个字符串。 深拷贝是指当一个类拥有资源,当这个类的对象发生复制过程的时候,资源重新分配,这个过程就是深拷贝。

实例

原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Prototype类需要具备以下两个条件:

  1. 实现Cloneable接口。在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法。在java虚拟机中,只有实现了这个接口的类才可以被拷贝,否则在运行时会抛出CloneNotSupportedException异常。
  2. 重写Object类中的clone方法。Java中,所有类的父类都是Object类,Object类中有一个clone方法,作用是返回对象的一个拷贝,但是其作用域protected类型的,一般的类无法调用,因此,Prototype类需要将clone方法的作用域修改为public类型。

原型模式是一种比较简单的模式,也非常容易理解,实现一个接口,重写一个方法即完成了原型模式。在实际应用中,原型模式很少单独出现。经常与其他模式混用,他的原型类Prototype也常用抽象类来替代。 

代码

代码语言:txt
复制
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("原型模式实现类");
     }
 }
 
 public class PrototypePattern {
 public static void main(String[] args) {
         ConcretePrototype cp = new ConcretePrototype();
 for(int i=0; i< 10; i++){  
             ConcretePrototype clonecp = (ConcretePrototype)cp.clone();  
             clonecp.show();  
         }  
     }
 }

推荐阅读

本文属于 设计模式系列

参考资料

《大话设计模式》 《HeadFirst设计模式》

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-06-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 结构
  • 动机
  • 浅拷贝与深拷贝
  • 实例
  • 推荐阅读
  • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档