原型模式

[02]Go设计模式:原型模式(Prototype )

故事扮演 提交于 2019-12-14 09:35:57
目录 原型模式 一、简介 二、代码实现 三、参考资料: 原型模式 一、简介 原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。可能每个对象有大量相同的数据,这个时候我们就可以缓存该对象,在下一个请求时返回它的克隆,仅需要更信部分不同的数据,需要的时候更新数据入库,以此来减少数据库交互。 二、代码实现 先定义一个原型复制的接口 type Cloneable interface { Clone() Cloneable } 实现Clone函数 type Person struct { name string age int height int } func (p *Person) Clone() Cloneable { person := *p return &person } func(p *Person) SetName(name string) { p.Name = name } func(p *Person) SetAge(age int) { p.Age = age } 来看完整代码实现 package main

13.原型模式(原型设计模式)详解

无人久伴 提交于 2019-12-14 00:11:03
在有些系统中,存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂且耗时耗资源,用原型模式生成对象就很高效,就像孙悟空拔下猴毛轻轻一吹就变出很多孙悟空一样简单。 原型模式的定义与特点 原型(Prototype)模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无须知道对象创建的细节。例如,Windows 操作系统的安装通常较耗时,如果复制就快了很多。在生活中复制的例子非常多,这里不一一列举了。 原型模式的结构与实现 由于 Java 提供了对象的 clone() 方法,所以用 Java 实现原型模式很简单。 1. 模式的结构 原型模式包含以下主要角色。 抽象原型类:规定了具体原型对象必须实现的接口。 具体原型类:实现抽象原型类的 clone() 方法,它是可被复制的对象。 访问类:使用具体原型类中的 clone() 方法来复制新的对象。 其结构图如图 1 所示。 图1 原型模式的结构图 2. 模式的实现 原型模式的克隆分为浅克隆和深克隆,Java 中的 Object 类提供了浅克隆的 clone() 方法,具体原型类只要实现 Cloneable 接口就可实现对象的浅克隆,这里的 Cloneable 接口就是抽象原型类。其代码如下: /

java设计模式--2.原型模式

為{幸葍}努か 提交于 2019-12-13 11:59:56
原型模式的定义与特点 原型(Prototype)模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无须知道对象创建的细节。例如,Windows 操作系统的安装通常较耗时,如果复制就快了很多。在生活中复制的例子非常多,这里不一一列举了。 原型模式的结构与实现 由于 Java 提供了对象的 clone() 方法,所以用 Java 实现原型模式很简单。 1. 模式的结构 原型模式包含以下主要角色。 抽象原型类:规定了具体原型对象必须实现的接口。 具体原型类:实现抽象原型类的 clone() 方法,它是可被复制的对象。 访问类:使用具体原型类中的 clone() 方法来复制新的对象。 其结构图如图 1 所示。 图1 原型模式的结构图 2. 模式的实现 原型模式的克隆分为浅克隆和深克隆,Java 中的 Object 类提供了浅克隆的 clone() 方法,具体原型类只要实现 Cloneable 接口就可实现对象的浅克隆,这里的 Cloneable 接口就是抽象原型类。其代码如下: //具体原型类 class Realizetype implements Cloneable { Realizetype() { System.out.println("具体原型创建成功!")

23种设计模式(5):原型模式

帅比萌擦擦* 提交于 2019-12-10 05:02:38
定义: 用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。 类型: 创建类模式 类图: 原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Prototype类需要具备以下两个条件: 实现Cloneable接口。在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法。在java虚拟机中,只有实现了这个接口的类才可以被拷贝,否则在运行时会抛出CloneNotSupportedException异常。 重写Object类中的clone方法。Java中,所有类的父类都是Object类,Object类中有一个clone方法,作用是返回对象的一个拷贝,但是其作用域protected类型的,一般的类无法调用,因此,Prototype类需要将clone方法的作用域修改为public类型。 原型模式是一种比较简单的模式,也非常容易理解,实现一个接口,重写一个方法即完成了原型模式。在实际应用中,原型模式很少单独出现。经常与其他模式混用,他的原型类Prototype也常用抽象类来替代。 实现代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 class Prototype

Prototype(原型)设计模式之析

穿精又带淫゛_ 提交于 2019-12-10 04:38:06
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 Prototype原型模式是一种创建型设计模式,Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。 它主要面对的问题是:“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有比较稳定一致的接口。 带Prototype Manager的原型模式: 客户(Client)角色:客户端类向原型管理器提出创建对象的请求。 [1] 抽象原型(Prototype)角色:这是一个抽象角色,通常由一个C#接口或抽象类实现。此角色给出所有的具体原型类所需的接口。在C#中,抽象原型角色通常实现了ICloneable接口。 具体原型(Concrete Prototype)角色:被复制的对象。此角色需要实现抽象的原型角色所要求的接口。 原型管理器(Prototype Manager)角色:创建具体原型类的对象,并记录每一个被创建的对象。 #include "stdafx.h" #include<iostream> #include<vector> #include<assert.h> usingnamespace std; //父类 class

原型模式

被刻印的时光 ゝ 提交于 2019-12-10 02:07:04
定义 原型模式(Prototype) :使用原型实例指定待创建对象的类型,并且通过复制这个原型来创建新的对象。 结构 Porototype(抽象原型类) :它是声明克隆方法的接口,是所有具体原型类的公共父类,它可以是接口,甚至可以是具体实现类。 ConcretePrototype(具体原型类) :它实现在抽象原型类中声明的克隆方法,在克隆方法中返回自己的一个克隆对象。 Client(客户类) :在客户类中,让一个原型对象克隆自身从而创建一个新的对象,只需要直接实例化或通过工厂方法等方式创建一个原型对象,再通过调用该对象的克隆方法即可得到多个相同的对象。由于客户类针对抽象原型类Portotype编程,因此用户可以根据需要选择的具体原型类,系统具有较好的可扩展性,增加或更换具体原型类都很方便。 浅克隆与深克隆 浅克隆 在浅克隆中,如果原型对象的成员变量是值类型(如int、double、byte、boolean、char等基本数据类型),将复制一份给克隆对象;如果原型对象的成员变量是引用类型(如类、接口、数组等复杂数据类型),则将引用对象的地址复制一份给克隆对象,也就是说原型对象和克隆对象的成员变量指向相同的内存地址。简单来说,在浅克隆中,当原型对象被复制时只复制它本身和其中包含的值类型的成员变量,而引用类型的成员变量并没有复制。 深克隆 在深克隆中

原型模式——创建型模式

时间秒杀一切 提交于 2019-12-09 09:50:56
思路: 马上又到找工作的时候了,当我们在准备一份份简历的时候有没有考虑过这样一个问题? 面对不同的工作岗位我们需要准备不同的求职简历,但是这样的几份不同的简历中还是有相当大的部分是相同的,我们如果每一份都从头开始重新制作,无疑是做了很多的无用功,浪费了很多时间。 那么,我们有没有办法不用重新new一个简历,只是对某一个原件进行适当的修改,就能实现这个功能呢? 别忘了,我们是程序员呀,程序员别的不一定行,Ctrl+C和Ctrl+V还是很溜的。复制下来对需要修改的部分进行修改不就行了? 但是同样别忘了,我们是程序员,如果这样一个问题用程序的思维来看,又会是什么样呢? 我们需要一个简历类,我们可以设置个人信息、工作经历,并且把它们显示出来。我们可以怎么写呢? class Program { static void Main(string[] args) { Resume a; a = new Resume("张三"); a.SetPersonalInfo("男", "22"); a.SetWorkExperience("1998-2000", "XX公司"); a.SetAimCompany("Google"); Resume b = new Resume("张三"); b = a; a.Display(); b.Display(); b.SetAimCompany("IBM"); a

【c++设计模式】原型模式

荒凉一梦 提交于 2019-12-07 15:12:26
创建型模式 5)原型模式 这种模式主要是用于获取当前实例的拷贝。 假如当前基类有很多派生类,而我们只有基类指针而无法确定指向对象时,是无法直接执行拷贝动作的。因为拷贝时需要显式调用该派生类的拷贝构造函数,也就必须要确定派生类的类型。 为了解决这个问题,在基类中添加clone方法,通过return new (*this)返回当前对象。 class Juice{ public: virtual void show() = 0; virtual Juice* clone() = 0; }; class AppleJuice : public Juice{ public: void show(){ cout<< "this is applejuice"<<endl; } Juice* clone(){ return new AppleJuice(*this); } }; class OrangeJuice: public Juice{ public: void show(){ cout<<"this is orangejuice"<<endl; } Juice* clone(){ return new OrangeJuice(*this); } }; int main(){ Juice* p1 = new OrangeJuice(); /* 传了很久很久 以至于忘了p1是什么 */ /

第九章-原型模式

吃可爱长大的小学妹 提交于 2019-12-06 16:53:48
原型模式(Prototype): 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 原型模式其实就是从一个对象创建另外一个可定制的对象,而且不需要知道任何创建的细节。 原型模式基本代码 #include<iostream> #include<string> using namespace std; //抽象基类 class Prototype { private: string m_strName; public: Prototype(string strName) { m_strName = strName; } Prototype() { m_strName = " "; } void Show() { cout << m_strName << endl; } virtual Prototype* Clone() = 0; }; // class ConcretePrototype1 class ConcretePrototype1 : public Prototype { public: ConcretePrototype1(string strName) : Prototype(strName) {} ConcretePrototype1() {} virtual Prototype* Clone() { ConcretePrototype1 *p =

设计模式之原型模式、策略模式、观察者模式

一笑奈何 提交于 2019-12-06 09:52:29
一、原型模式 1、什么是原型模式 克隆 原型模式是一个创建型的模式。原型二字表明了改模式应该有一个样板实例,用户从这个样板对象中复制一个内部属性一致的对象,这个过程也就是我们称的“克隆”。被复制的实例就是我们所称的“原型”,这个原型是可定制的。原型模式多用于创建复杂的或者构造耗时的实例,因为这种情况下,复制一个已经存在的实例可使程序运行更高效。 2、原型模式应用场景 (1)类初始化需要消化非常多的资源,这个资源包括数据、硬件资源等,通过原型拷贝避免这些消耗。 (2)通过new产生的一个对象需要非常繁琐的数据准备或者权限,这时可以使用原型模式。 (3)一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑使用原型模式拷贝多个对象供调用者使用,即保护性拷贝。 Spring框架中的多例就是使用原型。 3、原型模式UML类图(通用) 原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Prototype类需要具备以下两个条件: (1)实现Cloneable接口。在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法。在java虚拟机中,只有实现了这个接口的类才可以被拷贝,否则在运行时会抛出CloneNotSupportedException异常。 (2