Prototype模式

Prototype模式

Prototype模式是为了让对象提供自我复制的功能,即能够通过已有对象来创建新对象。

Prototype提供了在一个现有对象创建新对象的接口Clone,它的实现和详细语言相关。在C++中通过拷贝构造函数实现。

类的结构图例如以下所看到的:

实现例如以下:

//Prototype.h

//Prototyep

#ifndef _PROTOTYPE_H_
#define _PROTOTYPE_H_
class Prototype
{
public:
    virtual ~Prototype();
    virtual Prototype* Clone() const = 0;
protected:
    Prototype();
private:
};

class ConcretePrototype :public Prototype
{
public:
    ConcretePrototype();
    ConcretePrototype(const ConcretePrototype& cp);
    ~ConcretePrototype();
    Prototype* Clone()const;
protected:

private:
};
#endif

//prototype.cpp

#include"Prototype.h"
#include<iostream>
Prototype::Prototype()
{

}

Prototype::~Prototype()
{

}

ConcretePrototype::ConcretePrototype()
{

}
ConcretePrototype::~ConcretePrototype()
{

}

ConcretePrototype::ConcretePrototype(const ConcretePrototype& cp)
{
    std::cout << "ConcretePrototype copy Cotr" << std::endl;
}

Prototype* ConcretePrototype::Clone()const
{
    return new ConcretePrototype(*this);
}

//main.cpp

#include"Prototype.h"
#include<iostream>
using namespace std;
int main()
{
    Prototype* p = new ConcretePrototype();
    Prototype* p1 = p->Clone();
    return 0;
}

上面的代码实现比較简单,由于没有涉及深拷贝的问题(对象中没有涉及指针和复合对象的问题)。

在三个模式中。Factory模式、Builder模式、Prototype模式都是在创建对象,但它们之间有稍微差别。

Factory模式在于创建一组对象。AbstractFactory用来创建一组相互依赖的对象。Builder模式把复杂对象的创建分解,一步一步来创建对象;Prototype模式在于复制现有对象。

时间: 2024-10-28 16:04:08

Prototype模式的相关文章

Java原型模式(Prototype模式)

Prototype模式定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建. 如何使用原型模式 因为Java中的提供clone()方法来实现对象的克隆,所以Prototype模式实现一下子变得很简单.以勺子为例: public abstract class Abstrac

Creational模式之Prototype模式

1.意图 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 2.别名 无 3.动机 类似于linux命令中的cat fileA > fileB,实现文件的拷贝. 4.适用性 以下情况使用Prototype模式: 当一个系统应该独立于它的产品创建.构成和表示时,要使用Prototype; 当要实例化的类是在运行时刻指定时,例如,通过动态装载; 为了避免创建一个和产品类似层次平行的工厂类层次时: 当一个类的实例只能有几个不同状态组合中的一种时.建立相应数目的原型并克隆他们可能比每次用

C++Prototype模式详解—设计模式(5)

关于这个模式,突然想到了小时候看的<西游记>,齐天大圣孙悟空再发飙的时候可以通过自己头上的3根毛立马复制出来成千上万的孙悟空,对付小妖怪很管用(数量最重要).Prototype模式也正是提供了自我复制的功能,就是说新对象的创建可以通过已有对象进行创建.在C++中拷贝构造函数(CopyConstructor)曾经是很多程序员的噩梦,浅层拷贝和深层拷贝的魔魇也是很多程序员在面试时候的快餐和系统崩溃时候的根源之一. 作用: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. Proto

菜鸟学设计模式系列笔记之Prototype模式(原型模式)

菜鸟学设计模式系列笔记之Prototype模式: Intent: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 Motivation:以一个已有的对象作为原型,通过它来创建新的对象. 在增加新的对象的时候,新对象的细节创建工作由自己来负责,从而使新对象的创建过程与框架隔离开来. 应用场景: (1)当一个系统应该独立于它的产品创建.构成和表示时 (2)当要实例化的类是在运行时刻指定时,例如动态加载 (3)为了避免创建一个产品类层次平行的工厂类层次时 (4)当一个类的实例只能有几个

Java 实现原型(Prototype)模式

public class BaseSpoon implements Cloneable {//spoon 匙, 调羹 String name; public String getName() { return name; } public void setName(String name) { this.name = name; } @Override protected BaseSpoon clone() throws CloneNotSupportedException { System.o

设计模式之Prototype模式

通常我们会使用new 类名()的方法会去生成一个新的实例,但在开发过程中,有时候也会有"在不指定类名的前提下生成实例"的需求,那样,就只能根据现有实例来生成新的实例. 有三种情况,不能根据类来生成实例: 对象种类繁多,无法将它们整合到一个类中时: 难以根据类生成实例的时: 想解耦框架与生成的实例时. 不根据类来生成实例,而是根据实例来生成实例,就是Prototype模式,又叫原型模式. 实例程序是将字符串放入方框中或者加上下划线显示: Product接口 package site.wa

GOF设计模式——Prototype模式

一.什么是Prototype模式? 在编程中,我们可以使用new关键字指定类名来生成类的实例,但是有时候也会有不指定类名的前提下生成实例.因为有时候对象种类繁多,无法将它们整合到一个类中:或者,生成实例的过程过于复杂,难以根据类生成实例:又或者,想要将类与框架解耦.这时,为了能够在不使用类名的情况下生成实例,可以使用Prototype模式,Prototype模式又叫原型模式,专门做一些"复制"的操作. 二.Prototype模式思想 Client负责调用Prototype接口生成实例,

设计模式(4)-对象创建型模式-Prototype模式

1.对象创建型模式 1.4          Protoype模式 1.4.1需求 通过拷贝原形对象创建新的对象. 1.4.2结构 ?P r o t o t y p e(Gr a p h i c) - 声明一个克隆自身的接口. ?C o n c r e t e P r o t o t y p e(S t a ff.W h o l e N o t e.H a l fN o t e) - 实现一个克隆自身的操作. ?  C l i e n t(G r a p h i c To o l) - 让一个原

javascript模式——Prototype模式

GoF权威的解释是,原型模式是一种通过对一个对象的克隆,创建基于这个对象的多种对象的模式. 为了实现这种原型模式,可以直接使用ECMAScript 5 中的方法Object.create.它不紧可以创建出对特定对象的扩展出的对象,还可以增加新属性. var vehicle = { getModel: function () { console.log( "The model of this vehicle is.." + this.model ); } }; var car = Obj