5 创建型模式-----原型模式

模式动机:在软件系统中,有些对象的创建过程非常复杂,但是又需要频繁创建,这时候需要提供一个原型对象,使用时只需要复制这个原型对象就可以了。

模式定义(Prototype Pattern)使用原型实例指定创建对象的类型,然后通过复制原型对象来创建新对象。

模式结构图:

模式代码:

bt_原型模式.h

 1 #ifndef PP_H
 2 #define PP_H
 3
 4 #include <iostream>
 5
 6 using namespace std;
 7
 8 /*
 9     原型类
10 */
11 class Prototype
12 {
13 public:
14     virtual ~Prototype(){ }
15     virtual Prototype* clone() = 0;
16 };
17
18 /*
19     具体原型类
20 */
21 class ConcretePrototypeA : public Prototype
22 {
23 public:
24     ConcretePrototypeA(){ }
25     virtual Prototype* clone()
26     {
27         return new ConcretePrototypeA(*this);
28     }
29
30 private:
31     ConcretePrototypeA(const ConcretePrototypeA& cp)
32     {
33         cout << "复制了一份当前原型A的实例" << endl;
34     }
35 };
36 class ConcretePrototypeB : public Prototype
37 {
38 public:
39     ConcretePrototypeB(){ }
40     virtual Prototype* clone()
41     {
42         return new ConcretePrototypeB(*this);
43     }
44
45 private:
46     ConcretePrototypeB(const ConcretePrototypeB& cp)
47     {
48         cout << "复制了一份当前原型B的实例" << endl;
49     }
50 };
51
52 #endif // PP_H

bt_原型模式.cpp

 1 #include "bt_原型模式.h"
 2
 3 int main()
 4 {
 5     Prototype* pA = new ConcretePrototypeA;
 6     Prototype* pB = new ConcretePrototypeB;
 7     Prototype* copyOfA = pA->clone();
 8     Prototype* copyOfB = pB->clone();
 9
10     cout << "pA == copyOfA --> " << (pA == copyOfA ? true : false) << endl;
11
12     delete copyOfA;
13     delete copyOfB;
14     delete pA;
15     delete pB;
16
17     return 0;
18 }


模式优缺点:使用原型模式可以简化对象的创建过程,例如常用的Ctrl + C(复制)和Ctrl + V(粘贴)操作就是原型模式的应用。其复制得到的对象与原型对象是两个类型相同但内存地址不同的对象。

时间: 2024-11-07 21:35:00

5 创建型模式-----原型模式的相关文章

设计模式(创建型)之原型模式(Prototype Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! 概述 原型模式是一种创建型设计模式,它通过复制一个已经存在的实例来返回新的实例,而不是新建实例.被复制的实例就是我们所称的原型,这个原型是可定制的.原型模式多用于创建复杂的或者耗时的实例, 因为这种情况下,复制一个已经存在的实例可以使程序运行更高效,或者创建值相等,只是命名不一样的同类数据. 原型模式要求对象实现一个可以"克隆"自身的接口,这样就可以通过

&quot;围观&quot;设计模式(10)--创建型之原型模式(Prototype Pattern)

原型模式是创建型模式的一种,其特点在于通过"复制"一个已经存在的实例来返回新的实例,而不是新建实例.被复制的实例就是我们所称的"原型",这个原型是可定制的. 原型模式多用于创建复杂的或者耗时的实例,因为这种情况下,复制一个已经存在的实例使程序运行更高效:或者创建值相等,只是命名不一样的同类数据.----WIKIPEDIA 首先看下面这样的一个例子,使用本人自黑一下,实现Clonable接口然后实现它的clone的方法,然后通过该方法对这个对象进行克隆.看是不是像我们

java语言实现创建型设计模式—原型模式(Prototype)

一.描述 原型模式是通过一个原型对象来标明要创建的对象的类型,然后用复制这个原型对象的方法来拷贝创建更多的同类型对象.例如我们在程序的动态运行过程中有了一个对象,这个对象中包含了一系列的有效数据,我们此时需要一个和该对象完全相同的新对象,并且在拷贝之后,新旧对象之间没有任何联系,对任何一个对象的更改都不影响另一个对象. 在java中所有类都默认继承自java.lang.Object类,在这个Object类中有一个clone()方法,该方法将返回Object对象的一个拷贝. 我们让需要被拷贝的类实

【创建型】原型模式

原型模式主要是用原型实例指定创建原型对象的种类,并且通过拷贝原型创建新对象.最简单的理解就是克隆.就如cocos2d-x中的 class Clonable::clone();该模式的主要目的是可以在运行时,随时创建出某个对象的副本,并且副本具有与本体一样的状态信息.类图参考如下: 模式的编码结构参考如下: 1 namespace propotype 2 { 3 /*******************************************************************

05 【创建型】原型模式 理解克隆对象~

原型模式(克隆对象) 用于创建重复的对象,用克隆对象的方式代替new 关键字的使用. 就好比细胞分裂,最开始的一个细胞通过自我复制,分裂成两个.两个分裂成四个,依次指数增长 这里就涉及到一个概念,就是创建重复的对象,就好比细胞分裂的时候就是在重复创建对象,我们可以让对象实现Cloneable接口 通过父类的clone() 方法进行创建相同的对象,这里的相同是指有相同的属性,但是他们在内存中却有不同的引用存在 代码理解 对象实现Cloneable 重写父类的clone方法 public class

创建型-工厂方法模式

1.工厂方法模式意图: 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使一个类的实例化延迟到其子类. 2.应用场景: 考虑一个榨汁机的应用场景.榨汁机可以用来制作苹果汁.西瓜汁.橘汁等,即榨汁机可以用来制作水果汁.但是,夏天的冷饮店中,为了提高制作水果汁的效率和防止味道互串等情况,可能需要分别准备三个水果榨汁机,分别用来生产苹果汁.西瓜汁.橘汁等. 3.工厂方法模式类图: 角色: Product:定义工厂方法所创建对象.如场景描述中的果汁. ConcreteP

创建型-抽象工厂模式学习

1.抽象工厂模式的意图: 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 2.抽象工厂模式的适用性: 一个系统要独立于它的产品的创建.组合和表示时. 一个系统要由多个产品系列中的一个来配置时. 当你要强调一系列相关的产品对象的设计以便进行联合使用时. 当你提供一个产品类库,而只想显示它们的接口而不是实现时. 3.场景描述: 考虑一个生产多种不同风格的家具的工厂(FurnitureFactory),不同风格的家具系列可以提供不同的门.窗.地板等的组合,为同一所住房可以提供不同

(五)(创建型模式)原型模式

一.原型模式(prototype pattern): 使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.原型模式是一种对象创建型模式. 二.应用场景: 对象的创建非常复杂,可以使用原型模式快捷的创建对象.在运行过程中不知道对象的具体类型,可使用原型模式创建一个相同类型的对象,或者在运行过程中动态的获取到一个对象的状态. 三.应用实例: 动物界的掌控者Tom,想要再建造一辆奥迪车,但是再去生产比较麻烦,有没有别的方法快速获取呢? 四.方案: UML图: 代码1: package c

第7章 创建型模式—原型模式

1. 原型模式(Prototype pattern)的定义 (1)用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 ①通过克隆来创建新的对象实例 ②新的对象实例复制原型实例属性的值 (2)原型模式的结构和说明 ①Prototype:声明一个克隆自身的接口,用来约束想要克隆自己的类,要求他们都要实现这里定义的克隆方法. ②ConcretePrototype:实现Prototype接口的类,这些类真正实现了隆自身的功能. ③Client:使用原型的客户端,首先要获取到原型实例对象,然后