`
凤舞凰扬
  • 浏览: 65531 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

架构、框架、模式之轻松掌握设计模式(原型模式)

阅读更多
   好了,到了构建类型模式中的最后一种(当然是GOF)原型模式了。这个模式似乎是被讨论得最少的,原因是在Java中,Object本身便带有clone的方法(当然,它需要使用实现Cloneable接口的方式来激活)。而基于原型的clone也相对比较少的使用(最主要的原因是比较难以确定是深度clone还是浅度clone)。
   我们追溯不了这种模式的起源和ghost有何关系(其实根本就没有任何关系),只是感觉这样的一种模式,在现实生活中又是那么的常见。我们经常在安装好操作系统以及必备的软件后(比如升级包,office等等),将系统用ghost备份一下,这样可以让我们有问题的适合尽快还原。而许多大公司在管理公司机器的时候也是采用统一的clone包,快速安装和恢复系统。这些生活其实也就描述了clone的背景:简单而又能快速地去产生所期望的对象的副本。所期望的对象自然就是原型对象了。
   不过,现实生活中的另外一些例子,也可以给我们另样的思考。我们经常会发现,我们有时候使用clone的系统很不稳定,时不时有死机出问题的情况,而公司进行clone还原也是经常对同样配置的电脑进行操作,甚至不允许修改分区(我们公司的电脑都只有一个C区,哪怕它有200G)。这是为何呢?这便是作为原型存在的另外一种背景,那就是相同的环境。在不同的电脑配置中(只是因为都使用基于X86结构的通用配置,所以问题出现较少,但依然存在),通过镜像而还原的系统往往是不稳定的,因为许多系统环境的配置变了。我们也知道,在原型模式中其实有和实际生活中的clone还有个小小区别,也就是可以控制clone的程度(模式中当然可以通过不同实现来控制对象的深度clone或者浅度clone,而现实生活中往往是完全复制)。我们将这种思考带到原型模式的应用中来说吧。使用原型对象所产生的新对象副本在其使用环境下是否又跟原型对象一致呢?这其实决定了两点,一是我们要进行怎么样的clone实现,二是是否该提供这种模式来创建我们的对象。
   上周有些事情,一直没有写完,也没有更新, 今天继续.....
   原型模式在使用的时候,容易遇到这样的问题和误区: 我们常常希望通过clone的方式降低对象复制的曝光度(对于使用者来说,不需要关心对象是怎么样复制的),但是我们往往忽略了一些因素和条件限制, 第一,内部的状态属性是否具备或者能是否准许被复制? 第二,究竟该做到何种程度的复制?(由对象关联引发出来的对象链究竟是共用还是继续复制?) 而这类问题往往在设计之初是很难预料和估计的.
分享到:
评论

相关推荐

    小D深入浅出设计模式+框架源码剖析实战

    ├─第一章 旭瑶-小滴架构师成长系列软件设计模式课程介绍 │ 1.2设计模式全家桶课程大纲速览.mp4 │  ├─第二章 想成为架构师的你,不可不知道的设计模式精髓 │ 2.1设计模式的六大原则你知道多少.mp4 │ 2.3...

    java设计模式

    目录: 前 言 第一部分 大旗不挥,谁敢冲锋——热身篇 第1章 单一职责原则 1.1 我是“牛”类,我可以担任多职吗 1.2 绝杀技,打破你的传统思维 1.3 我单纯,所以我快乐 1.4 最佳实践 ...附录:23个设计模式

    最新设计模式超级详解+Tomcat架构源码分析+Spring源码分析 资深级设计模型课程

    Spring源码分析,web源码分析,Tomcat架构源码分析都是非常深入的源码级课程,期待研究设计模式和深入学习源码内功的朋友们,一定要仔细的学习研究。 (0);目录中文件数:1个 ├─3.代码.zip (1)\1.笔记;目录中文...

    OBJECTIVE-C编程之道 IOS设计模式解析电子书+源代码

    OBJECTIVE-C编程之道 IOS设计模式解析电子书+源代码《Objective-C编程之道:iOS设计模式解析》是基于iOS的软件开发指南。书中应用GoF的经典设计模式,介绍了如何在代码中应用创建型模式、结构型模式和行为模式,...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷1

    (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/abstractfactory //11.2抽象...

    二十三种设计模式【PDF版】

    设计模式之 Prototype(原型) 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 B. 结构模式 设计模式之 Adapter(适配器) 使用类再生的两个方式:组合(new)和继承(extends),这个已经在 ...

    微软应用架构指南(第2版)中文版

    《微软应用架构指南(第2版)》旨在帮助您:理解在微软平台上开发成功的解决方案的底层架构、设计原则,以及设计模式。确定正确的策略和设计模式,帮助您设计解决方案的分层、组件和服务。为解决方案确定和处理关键的...

    java 企业设计模式(框架设计)

    Factory Singleton(单态) Builder Prototype(原型) Flyweight Bridge Decorator(油漆工) Composite(组合) Adapter(适配器) Proxy(代理) Facade(外观 总管 Manager) Visitor Observer

    java设计模式选择题复习题.doc

    为什么 MVC不是设计模式,应该是框架/架构模式,因为它的定义是抽象的,没有足够的细节描 述使你直接去实现,而只能根据MVC的概念和思想,用几个设计模式组合实现。 举出一个生活中使用装饰者模式的例子,用程序实现...

    asp.net知识库

    Asp.net 利用OleDb的GetOLEDBSchemaTable方法得到数据库架构信息 用于 Visual Studio .Net 的 IBM DB2 开发外接程序 第2章 并发操作的一致性问题 (2) Using sqlite with .NET Visual Studio 2005 中的新 DataSet ...

    【白雪红叶】JAVA学习技术栈梳理思维导图.xmind

    设计模式 结构模式 适配器模式 桥接模式 组合模式 装饰模式 外观模式 享元模式 代理模式 创建模式 抽象工厂模式 工厂方法模式 建造这模式 原型模式 单例模式 行为模式 责任链模式 命令模式 解释...

    mohuishou.github.io:Mohuishou的博客

    Go设计模式04-原型模式 Go设计模式05-创建型模式总结 结构型 Go设计模式06-代理模式(generate实现类似动态代理) Go设计模式07-桥接模式 Go设计模式08-装饰器模式 Go设计模式09-适配器模式 Go设计模式10-门面模式 Go...

    面向模式的软件体系结构(卷1-卷5)

    面向模式的软件体系结构(卷1-卷5) , 含ACE网络中间件作者力著。

    深度学习后端架构选型及其应用场景选择

    PyTorch提供了直观的API,支持快速原型设计和研究。PyTorch特别适合于研究和开发阶段,需要快速迭代和实验的场景。 MXNet:是一个高效的多语言深度学习框架,支持灵活的编程模式,既可以像PyTorch那样进行命令式...

    基于微信小程序的记账本的设计与实现

    基于微信小程序的记账本的设计与实现 摘要:在数字经济的推动...通过RESTful API设计,实现了前后端分离的架构模式,增强了系统的模块化和维护性。 关键词:记账;Java语言;微信小程序;Spring Boot框架;MySQL数据库

    非常苛刻的java工作要求

    2. 系统架构设计、框架设计与实现、系统可行性论证与原型开发; 岗位要求: 1. 精通web jsp,servlet,、Tag、java bean,JMS,EJB,Jdbc开发,熟悉J2EE规范,熟悉各种常用设计模式,熟悉UML建模工具;掌握主流的Java...

    WebIM系统设计方案.pdf

    MVC即为Model-View-Controller(模型-视图-控制器),MVC是⼀种设计模式,以MVC设计模式为主体结构实现的基础代码 框架⼀般称为MVC框架。 MVC中M、V和C所代表的含义如下: Model(模型)代表⼀个存取数据的对象及其...

    高级软件架构师复习提纲

    18、关于“解决方案验证”说法正确的是:解决方案验证可以降低风险,避免在大规模投资后才发现解决方案的基础构架部分并不能在生产中很好地运行 / MSF解决方案验证并不完全等同于原型,或单纯的技术验证。...

    SIMONFramework:人工智能学习框架

    SIMON 是设计人工智能的框架。 它允许开发人员有效地应用智能逻辑,而不是使用可数的“if ~ else”语句。 有关于源目录中包含的文件的信息。 SIMON v1.1 - 已经用C#实现,是框架的原型。 是目前源码中最稳定的...

Global site tag (gtag.js) - Google Analytics