原文地址:http://www.cnblogs.com/BeyondAnyTime/archive/2012/05/19/2508963.html

1.初识原型模式

大家都知道连锁机构是现在灰常流行的商业模式,比如咖啡之翼,那么假设咖啡之翼要在长春新建立一个分店,所经营的产品和以前在其他的城市已经存在的店经营的产品差不多,那么面向对象开发的角度怎么解决这个问题呢?难道要重新的实例化一个咖啡之翼的店??这显然不太好吧,咖啡之翼里面经营的产品(假设是属性吧)都需要重新写,这就是在做大量的重复工作啊,这显然是不符合OO开发思想的。遇到这样的情况,并不是重新建立一个类来解决这样的问题,而是通过设计模式中的“原型模式”来解决这种问题。是这种问题,也就是这类问题,具体是哪类问题最后总结比较好一点。

2.原型模式实现

利用原型模式来解决上面的问题,是这样实现的。通过在类中实现一个叫做clone的函数,这样通过该类已经实例化的一个对象Sample调用Sample.clone()就完成了已存在对象Sample 的复制。看到上面加深的“实现”两个字了吗?这里面用“实现”两个字是有原因的,实际上若一个java类不指明从哪个类继承而来则默认为从Object直接继承而来,Object类中存在clone方法,这也就被继承了,因此称之为“实现”。实际上要完成克隆功能的类不仅要实现clone方法还要实现Cloneable接口。这又是为啥子呢?因为虽然Object类中存在clone方法,但是设置为protected类型,来限制外部类的访问。因此要通过实现Cloneable接口来完成。如此一来,原型似乎就可以实现啦。

3.浅克隆和深克隆

       怎么分为浅克隆和深克隆呢?有没有想过这种方式得来的对象和源对象有什么关系呢?其实,新得到的对象和源对象是不同的对象,具有不同的内存地址,但是根据对象内部属性可以分为浅克隆和深克隆。如果我说:“我们希望即使修改了克隆后的对象的属性值,也不会影响到源对象,这种克隆方式称之为深克隆”,那么浅克隆是不是也就理解了呢。显然,如果不希望修改复制后的对象对原来的对象产生影响则要用深克隆,这种情况很常见的,大家编过一点的程序应该都遇到过。自然相对于浅克隆,深克隆是稍稍复杂一点的。

4.原型模式适用场合:

原型模式在几个方面比较有效:

       4.1如果说我们的对象类型不是刚开始就可以确定,而是这个类型是在运行期确定的话,那么我们通过这个类型的对象克隆出一个新的类型更容易。

       4.2有的时候我们可能在实际的项目中需要一个对象在某个状态下的副本

       4.3当我们在处理一些对象比较简单,并且对象之间的区别很小,可能只是很固定的几个属性不同的时候,可能我们使用原型模式更合适。

注:东西不要学死,重要的是理解不是背诵,原型模式还有其他可用的场合,要理解原型模式的原理,这样才能真正地为我所用,这只是一种思想,可能在很多地方好用,只有真正地理解才能在以后的实践中提出新的看法。

转载于:https://www.cnblogs.com/xbzhu/p/6760761.html

设计模式之原型模式(Prototype)相关推荐

  1. 乐在其中设计模式(C#) - 原型模式(Prototype Pattern)

    [索引页] [源码下载] 乐在其中设计模式(C#) - 原型模式(Prototype Pattern) 作者:webabcd 介绍 用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象. ...

  2. 设计模式之原型模式(Prototype)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.FactoryMethod(工厂方法模式):2.Abstract Factory(抽象工厂模式):3.Sin ...

  3. 设计模式之原型模式prototype

    1.原型模式的使用和本质.以及优势: a.通过 new 产生一个对象需要非常繁琐的数据准备或者访问权限,则可以使用原型模式. b.原型模式的使用就是 java 中的克隆技术,以某个对象为原型,复制出新 ...

  4. 【设计模式】—— 原型模式Prototype

    前言:[模式总览]----------by xingoo 模式意图 由于有些时候,需要在运行时指定对象时哪个类的实例,此时用工厂模式就有些力不从心了.通过原型模式就可以通过拷贝函数clone一个原有的 ...

  5. java prototype是什么,java设计模式-原型模式(Prototype)

    定义 原型模式属于对象的创建模式.通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象.这就是原型模式的用意 原型模式的结构 原型模式要求对象实现同一个可 ...

  6. 温故而知新:设计模式之原型模式(Prototype)

    原型模式个人以为最适合的场景:参照现有的某一个对象实例,快速得到多个完整的实例副本.(通常是深拷贝的副本) 深拷贝在c#中实现的最简单方式莫过于通过反序列化得到一个全新的对象实例.(当然如果浅拷贝的话 ...

  7. 设计模式五: 原型模式(Prototype)

    简介 原型模式是属于创建型模式的一种,是通过拷贝原型对象来创建新的对象. 万能的Java超类Object提供了clone()方法来实现对象的拷贝. 可以在以下场景中使用原型模式: 构造函数创建对象成本 ...

  8. C++设计模式——原型模式(Prototype Pattern)

    C++设计模式--原型模式(Prototype Pattern) 微信公众号:幼儿园的学霸 目录 文章目录 C++设计模式--原型模式(Prototype Pattern) 目录 定义 代码示例 普通 ...

  9. 设计模式(23):创建型-原型模式(Prototype)

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...

  10. C#设计模式(6)——原型模式(Prototype Pattern)

    一.引言 在软件系统中,当创建一个类的实例的过程很昂贵或很复杂,并且我们需要创建多个这样类的实例时,如果我们用new操作符去创建这样的类实例,这未免会增加创建类的复杂度和耗费更多的内存空间,因为这样在 ...

最新文章

  1. 机器学习中的数学全集 tsinghua 石溪
  2. Struts2(1)简介
  3. 计算机学院李世杰,有关办理2016级转专业学生相关手续通知
  4. 前端学习(2928):昨日回顾
  5. python基础技巧总结(四)
  6. 计算机语言恢复,win10系统找回消失不见语言栏的恢复方法
  7. 软件专家袁萌:番茄花园作者罪有应得
  8. linux-选择输入法
  9. 使用PostgREST的RestAPI操作之 类型转JSON对象 | 嵌入视图
  10. 整洁架构之道--三种经典的编程范式
  11. [转]JDK动态代理
  12. 如何在linux查找虚拟机主机号_Linux主机名如何重命名?
  13. python办公室妙用-python eval()函数的妙用和滥用
  14. 区块链 智能合约 执行原理
  15. 2b青年欢乐多之地铁奇幻记
  16. 使用NC-SI共享网口方式建立I350与BMC管理控制器的IPMI访问
  17. 绝地反击 我的战胜贫困的经历01 转载 整理
  18. 新冠病毒对计算机的影响,人工智能给新冠病毒分类
  19. Python数据分析与挖掘——回归模型的假设检验
  20. IT民工,你的未来在哪里?

热门文章

  1. 【MVC+MySQL+EntityFramework】查询性能优化笔记
  2. [SCOI2005][BZOJ1085] 骑士精神
  3. Android之提交数据到服务端方法简单封装
  4. Software Project Management之EVM问题的求解
  5. express怎么读取html,Express 配置HTML页面访问的实现
  6. down perm什么意思_没想到“羽绒服”竟叫down coat!为啥有个down?
  7. 2021年POS机费率上调了吗?
  8. 拍摄人像最难的是哪个方面?
  9. 茅台少女踩曲玄机何在?
  10. 成功唯一的通道就是必须迷上你所做的事