展开

关键词

Prototype简介

这种类型的设计属于创建型,它提供了一种创建对象的最佳方。这种是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种。 什么情况下使用原型设计呢?一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。 实现方c++ c++中可以通过实现拷贝构造函数的方法实现,要注意深拷贝和浅拷贝的问题。java 实现Cloneable接口,并覆写clone方法;使用对象流。 prototype.png抽象原型class Prototype {public: virtual Prototype * clone() = 0;};具体原型class ContretePrototype * clone() { ContretePrototype *prototype = new ContretePrototype(*this); return prototype; } ~ContretePrototype

12610

5.设计--原型(prototype)

原型是一种创建型,例如我们要创建一个Student对象都是采用的new Student();但是有些时候对象的创建十分复杂,这个时候原型就登场了,就像毕业论文太长了自己写太麻烦。 2.原型结构图 Product是一个接口,表示产品的接口,只要是产品都会实现此接口,例如Television(电视)和Computer(电脑)。 同时Product继承了Cloneable,原因是原型的复制是要基于clone方法的,而clone方法必须实现Cloneable接口。 3.原型的实现 Product是一个接口,表示产品的接口,只要是产品都会实现此接口。 Television(电视)表示的就是电视产品,实现Product接口。同时拥有自己的品牌和制造日期。 原型一般是解决对象的创建比较复杂的场景,原型优缺点如下 优点:能够解决复杂对象的创建,同时进行解耦,如果复杂的每次自己创建,再具体产品进行修改后,业务代码全部可能会进行调整。

6930
  • 广告
    关闭

    腾讯云前端性能优化大赛

    首屏耗时优化比拼,赢千元大奖

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    设计的征途—5.原型(Prototype

    孙悟空可以用猴毛根据自己的形象复制出很多跟自己一一样的小猴兵出来,其实在设计中也有一个类似的,我们可以通过一个原型对象来克隆出多个一一样的对象,这个就是原型。 原型Prototype) 学习难度:★★★☆☆ 使用频率:★★★☆☆ 一、大同小异的工作周报  M公司一直在使用自行开发的一个OA系统进行日常工作办理,但在使用过程中,越来越多的人对工作周报的创建和编写块产生了抱怨 二、原型概述2.1 关于原型  原型的原理很简单,将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象克隆自己来实现创建过程。 原型Prototype):使用原型实例指定创建对象的种类,并且通过拷贝这些原 型创建新的对象。原型是一种对象创建型。   需要注意的是,通过克隆方法所创建的对象时全新的对象。   原型的结构如下图所示:?● Prototype(抽象原型类):它是声明克隆方法的接口,是所有具体原型类的公共父类,可以是抽象类也可以是接口,甚至还可以是具体实现类。

    23130

    复习:GoF的23种设计Prototype(创建型)

    (以前的工艺)我小时候有经历过月饼的制作,提前买好面粉、糖、摸具、鸭蛋黄等,将面粉揉成团然后再用杆搓成面皮,将鸭蛋黄、糖配料什么的一股脑的卷成一团,用面皮包裹好,再使用具整好形状,烤至金黄,出锅开吃。 Prototype(原型)上面讲的使用具整理好月饼,也可以看做一个原型,我们制作具的过程,就已经完成了一个形状满意的月饼,后面制作月饼都和前一个类似。 原型定义:通过“复制”一个已经存在的实例来返回新的实例,而不是新键实例。被复制的实例就是我们称的“原型”。 );false }} interface Prototype extends Cloneable { public abstract void user(); public abstract Prototype prototype) { map.put(name, prototype); } public Prototype create(String prototypeName) { Prototype clone

    15310

    【设计Prototype原型

    原型 原型(Prototype的定义:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 Prototype应用场景 原型通常适用于以下场景。对象之间相同或相似,即只是个别的几个属性不同的时候。 在Spring中,如果一个类被标记为prototype,每一次请求(将其注入到另一个bean中,或者以程序的方调用容器的getBean()方法)都会产生一个新的bean实例。 ,需产生很多相同对象的时候注意区分深克隆与浅克隆 设计专辑 浅析单例的8种写法【设计】策略之“这不就是if-else吗”【设计】工厂系列-FactoryMethod,AbstractFactory 【设计】慎用多层继承,不妨试试装饰器【设计】责任链-号称倒数第二难的设计终于搞明白了【设计】Observer 观察者浅析这就是板方法?

    10420

    设计 - Prototype 原型

    前言 在设计的系列文章中,我们前面已经写了工厂、单列、建造者,在针对创建型中,今天想跟大家分享的是原型其实原型在我们的代码中是很常见的,但是又容易被我们所忽视的一种,那么什么是原型呢 在上面的图中我们可以看出原型其实很简单: 第一个是抽象原型(prototype)声明clone方法,可以是接口可以是基类,在简单的场景下我们都可以不用基类直接具体类就可以了。 其实在其他的地方我们可以用到原型,比如我们在发松活动的PUSH通知,针对平台百万、千万、甚至上亿的用户发送通知的时候通知的内容基本都是一样的只是推送用户不一样或者有些特别字段值的小改动,那我们这里就可以用原型来做 总结原型使用起来简单,但是在我们每次在clone基类或者有引用对象的时候需要我们去修改原型对象的clone方法,这不符合我们开闭原则。 在一般情况下是不建议用这种的除非创建的对象成本特别大,或者在一些特殊场景使用,最后针对一些不常用的我不会详细跟大家分享,但是我会在后面做个分享总结,后面开始为大家分享行为型

    12110

    Java设计(五)Prototype原型

    一、场景描述创建型中,从工厂方法,抽象工厂,到建造者,再到原型,我的理解是,创建对象的方逐步从编码实现转向内存对象处理。 例如,在“仪器数据采集器”的子类对象“PDF文件数据采集器”和“Excel文件数据采集器”的创建过程中,工厂下定义各子类,并由(抽象)工厂类Factory创建,因此各子类可在类定义中定义各自的属性; 建造者下,通过不同的创建者类Builder创建不同的子对象,此时不再定义子类;而原型下,则完全由调用者基于父对象克隆创建子对象,不在针对子对象创建类或者其相关的工厂、建造者类。 三种对应于不同的场景,实际操作时,根据场景合理选择。 原型下,基于原型类对象,克隆创建新对象,因此为原型类对象赋予的属性值在新对象中可直接使用,免去了重复赋值;例如仪器数据采集器的共同初始化工作可在原型类对象中完成,随后将其克隆出PDF文件数据采集器对象和

    33170

    原型(Prototype)

    原型的结构 原型包含以下3个角色: •Prototype(抽象原型类) •ConcretePrototype(具体原型类) •Client(客户类)浅克隆与深克隆 浅克隆(Shallow Clone 软谋高级班 }; return studentPrototype; } public static StudentPrototype CreateInstanceSerialize() { 序列化方创建克隆 ,需要保证被克隆的对象具有 serialize 特性标签 return SerializeHelper.DeepClone(_studentPrototype); } } 原型的理解 原型在我的理解中时基于单例的一个扩展 Class.Num } Remark={box2.Class.Remark }); Console.WriteLine(*****深层次克隆 End**********); }深层次克隆2 序列化 { 使用序列化的方进行克隆原理

    18730

    原型Prototype

    原型Prototype)原型Prototype)意图:用原型实例制定创建对象的种类,并且通过拷贝这些原型创建新的对象。应用:JavaC#中的Clonable和IClonable接口等。 结构:?心得:原型本质上就是对象的拷贝,使用对象拷贝代替对象创建的原因有很多。比如对象的初始化构造非常复杂,消耗资源巨大;运行时对象状态变化不可重现;无法获得对象的成员的运行时值等。 实现原型关键在于对象的正确复制,因此像高级语言实现的那样——支持复制接口。 举例:按照上述设计,这里实现的代码如下:基本原型接口——相当于Clonableclass Prototype{public: virtual Prototype* Clone()=0; virtual  ~Prototype(){}};原型管理器class PrototypeMgr{    hash_mapmap;public: void regProto(char* key,Prototype*p)

    25750

    Java原型(prototype)

    prototype也就是原型,是javaGOF23种设计中的一种,我们在学习spring的时候在bean标签的学习中碰到过,所以本文来给大家介绍下原型原型  在java中我们知道通过 &emps;原型我们也称为克隆,即一个某个对象为原型克隆出来一个一一样的对象,该对象的属性和原型对象一一样。而且对于原型对象没有任何影响。 原型的克隆方有两种:浅克隆和深度克隆 原型 说明 浅克隆 只是拷贝本对象,其对象内部的数组、引用对象等都不拷贝,还是指向原生对象的内部元素地址 深度克隆 深复制把要复制的对象所引用的对象都复制了一遍 ~实现了深度克隆原型和直接new对象方的比较当我们需要大量的同一类型对象的时候可以使用原型,下面是两种方的性能对比:用两种方同时生成10个对象** * 测试普通new方创建对象和clone 则可以考虑使用原型

    53560

    JavaScript原型prototype

    每个函数都有一个属性叫做prototype,这个prototype的属性值是一个对象(属性的集合),默认的只有一个叫做constructor的属性,指向这个函数本身。 JavaScript中的原型(prototype)是和函数(function紧密相连的)var o={} 他不是有用function他有原型吗? 答:必须的每一个通过new操作符生成出来的对象都持有一个属性__proto__,这个属性保存了创建他的构造函数的prototype的原型的引用。  (2.1)第一种扩展方,显示扩展,通过ObjectObject.getPrototypeOf(cat).name=猫咪;通过object获取原型链       (2.2)第二种扩展方,隐示扩展,通过 b.getAge(2); 2,简单方实现继承var b={};空类b.

    31040

    设计之原型Prototype )引入原型原型的实例小结为什么需要使用原型

    引入原型原型的实例为什么需要使用原型引入原型如果读者很熟悉javascript的话,对原型这个词应该不会陌生。原型是用来生成实例的,但不是利用类来生成实例,而是通过实例来生成实例。 实际上,这就是原型的基本思想,根据实例原型和实例来生成新的实例。介绍完基本思想后,下面我们就通过一个实例来具体理解一下原型实例。我们实现一段将字符串加上方框中打印出来或者是加入下划线显示出来。 Java中要实现原型,也就是实例的复制,我们可以直接利用clone方法,需要实现cloneable接口。 这个类实现了product接口,createClone是用于复制自己,生成一个新的一一样的实例,也就是原型的思想。use方法将结果显示出来。 image.png小结下面我们来总结Prototype原型首先,我们给出Prototype原型的类图?

    12820

    【设计】—— 原型Prototype

    意图  由于有些时候,需要在运行时指定对象时哪个类的实例,此时用工厂就有些力不从心了。 通过原型就可以通过拷贝函数clone一个原有的对象,给现在的对象使用,从而创建更多的同类型的对象。  结构  【简单原型】用于原型的版本不多的时候?   【登记的原型】如果原型的实现很多种版本,那么通过一个登记管理类,可以方便的实现原型的管理。?  Prototype 原型接口,定义原型的结构。   (这个没怎么理解)  代码结构  【简单原型】 1 package com.xingoo.test; 2 3 interface Prototype{ 4 public Object clone() ; 5 } 6 class ConcretePrototype1 implements Prototype{ 7 public Object clone() { 8 Prototype prototype

    27980

    设计之原型Prototype

    通过 new 产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型。一个对象多个修改者的场景。 一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑使用原型拷贝多个对象供调用者使用。 在实际项目中,原型很少单独出现,一般是和工厂方法一起出现,通过 clone 的方法创建一个对象,然后由工厂方法提供给调用者。 Java中的浅复制通常使用clone()方完成。当进浅复制时,clone函数返回的是一个引用,指向的是新的clone出来的对象,此对象与原对象分别占用不同的堆空间。

    16930

    设计- 原型(Prototype Pattern)

    定义 原型(Prototype Pattern):指定使用原型实例创建的对象类型,并通过复制此原型创建新对象。 formatter.Serialize(stream, this); stream.Position = 0; return formatter.Deserialize(stream) as Sheep; } }原型参与者 原型适用情形当在运行时通过动态加载指定要实例化的类时当对象创建比克隆成本高时原型特点它允许您创建一个现有对象的副本,并根据您的需要修改它,而不是经历从头创建和设置对象的麻烦。 其他 深拷贝 浅拷贝 源码地址 dotnet-design-patterns 其他设计 23种设计

    13310

    原型 prototype 创建型 设计(七)

    原型  prototype意图 用原型实例指定需要创建的对象的类型,然后使用复制这个原型对象的方法创建出更多同类型的对象显然,原型就是给出一个对象,然后克隆一个或者更多个对象小时候看过的动画片《 对于深拷贝,可以借助于序列化实现,深拷贝一个对象结构 原型作为创建型的一种与工厂建造者是类似的,都是为了创建对象只不过是创建的方不同原型的创建逻辑则是借助于已经存在的对象,调用他的拷贝方法 的应用,只需要原型类完成这步即可这就是Java中原型型使用方因为在Java中,所有的对象直接或者间接地继承Object所以始终内置的隐含了Object这一抽象角色  我们的示例代码中,Prototype 拥有管理器的原型原型中最为关键的是调用某个对象的拷贝方法,进行原始对象的复制所以原型一种常见的用法就是借助于这个原始对象,达到工厂方法的效果客户端中保存一个ConcretePrototype 看得出来,从对象管理器中获取的对象,都是原有对象的一个clone  并不是相同的对象带管理器的原型也叫做 登记形的原型登记就是相当于在管理器中备案适用场景 为什么要使用原型

    19020

    浅谈JAVA设计之——原型Prototype

    三、参与者Prototype 声明一个克隆自身的接口。ConcretePrototype 实现一个克隆自身的操作。Client 让一个原型克隆自身从而创建一个新的对象。四、类图? 示例Prototypepackage com.lyz.design.prototype;** * 原型类,实现Cloneable接口 * @author binghe * *public class Prototype com.lyz.design.prototype;** * 原型类的子类,用于构建原型 * @author binghe * *public class ConcretePrototype extends Prototype com.lyz.design.prototype;** * 测试类 * @author liuyazhuang * *public class Test { public static void main(String[] args) { Prototype pro = new ConcretePrototype(prototype); Prototype pro2 = (Prototype)pro.clone(); System.out.println(

    7610

    温故而知新:设计之原型(Prototype)

    原型个人以为最适合的场景:参照现有的某一个对象实例,快速得到多个完整的实例副本。(通常是深拷贝的副本)深拷贝在c#中实现的最简单方莫过于通过反序列化得到一个全新的对象实例。 比如可能每个小兵还要带兵器若干),这些个实例的数量是动态的,但是几乎每个小兵的属性都完全相同,每匹战马的属性也相同,很显然写一堆的new()造出若干实例,再逐一对属性赋值是可行的,但是并非最好的做法,下面看看原型的实现:原型代码示例  原型 父类 40     { 41 public Prototype Clone()  42         { 43             MemoryStream ms = new MemoryStream ; 48         } 49     } 50  51  52  小兵 53  54      55 public class Soldier : Prototype  56     { 57 ps:原型其实最早的应用不是计算机领域,而是中国古代的活字印刷术.

    31750

    PHP设计(四)原型Prototype实例详解【创建型】

    本文实例讲述了PHP设计:原型Prototype。分享给大家供大家参考,具体如下:1. 效果Prototype有许多和Abstract Factory 和 Builder一样的效果:它对客户隐藏了具体的产品类,因此减少了客户知道的名字的数目。 此外,这些使客户无需改变即可使用与特定应用相关的类。下面列出Prototype的另外一些优点。 Prototype可以极大的减少系统所需要的类的数目。 3) 改变结构以指定新对象:许多应用由部件和子部件来创建对象。 在像 C + +这样的语言中,Prototype是利用这种功能的关键。一个希望创建动态载入类的实例的应用不能静态引用类的构造器。

    11120

    常用开源框架中设计使用分析-原型设计Prototype Pattern)

    五、原型设计Prototype Pattern)5.1 介绍相比单例设计,原型是每次创建一个对象,下面看下spring是如何使用原型的阿里巴巴长期招聘Java研发工程师p6,p7,p8 Create bean instance. if (mbd.isSingleton()) { ... } 创建原型bean else if (mbd.isPrototype()) { Its a prototype

    34710

    相关产品

    • 共享带宽包

      共享带宽包

      共享带宽包(BWP)是一种多IP聚合的计费模式 ,可大幅降低公网费用 。共享带宽包提供包月带宽 ,月 TOP5 消峰计费 ,月 95 消峰计费等多种计费模式 ,满足您不同业务场景。合理配置共享带宽包可帮您大幅降低公网费用 ,优化业务成本。

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭

      扫码关注云+社区

      领取腾讯云代金券