【设计模式】Prototype Pattern

main.cpp

#include "Prototype.h"
#include <iostream>
using namespace std;

int main(int argc, char *argv[]) {

    Prototype *p = new ConcreatePrototype();

    Prototype *p1 = p->Clone();

    return 0;
}

Prototype.h

#ifndef _PROTOTYPE_H
#define _PROTOTYPE_H

class Prototype {
public :
    virtual ~Prototype();

    virtual Prototype *Clone() const = 0;
protected :
    Prototype();
};

class ConcreatePrototype :public Prototype {
public :
    ConcreatePrototype();

    ConcreatePrototype(const ConcreatePrototype &cp);

    ~ConcreatePrototype();

    Prototype *Clone() const;
};

#endif

Prototype.cpp

#include "Prototype.h"
#include <iostream>
using namespace std;

Prototype::Prototype() {}

Prototype::~Prototype() {}

Prototype *Prototype::Clone() const {
    return 0;
}

ConcreatePrototype::ConcreatePrototype() {}

ConcreatePrototype::~ConcreatePrototype() {}

ConcreatePrototype::ConcreatePrototype(const ConcreatePrototype &cp) {
    cout << "ConcreatePrototype..." << endl;
}

Prototype *ConcreatePrototype::Clone() const {
    return new ConcreatePrototype(*this);
}
时间: 2024-11-05 01:23:22

【设计模式】Prototype Pattern的相关文章

NET设计模式 第二部分 创建型模式(5):原型模式(Prototype Pattern)

原型模式(Prototype Pattern) ——.NET设计模式系列之六 Terrylee,2006年1月 概述 在软件系统中,有时候面临的产品类是动态变化的,而且这个产品类具有一定的等级结构.这时如果用工厂模式,则与产品类等级结构平行的工厂方法类也要随着这种变化而变化,显然不大合适.那么如何封装这种动态的变化?从而使依赖于这些易变对象的客户程序不随着产品类变化? 意图 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 结构图 Prototype模式结构图 生活中的例子 Pr

二十四种设计模式:原型模式(Prototype Pattern)

原型模式(Prototype Pattern) 介绍用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象. 示例有一个Message实体类,现在要克隆它. MessageModel using System; using System.Collections.Generic; using System.Text; namespace Pattern.Prototype { /// <summary> /// Message实体类 /// </summary> publi

深入浅出设计模式——原型模式(Prototype Pattern)

模式动机在面向对象系统中,使用原型模式来复制一个对象自身,从而克隆出多个与原型对象一模一样的对象.在软件系统中,有些对象的创建过程较为复杂,而且有时候需要频繁创建,原型模式通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象,这就是原型模式的意图所在. 模式定义原型模式(Prototype Pattern):原型模式是一种对象创建型模式,用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象.原型模式允许一个对象再创建另外一个可定制的对象,无

Constructor Prototype Pattern 原型模式(PHP示例)

当一个类大部分都是相同的只有部分是不同的时候,如果需要大量这个类的对象,每次都重复实例化那些相同的部分是开销很大的,而如果clone之前建立对象的那些相同的部分,就可以节约开销. 针对php的一种实现方式就是__construct()和initialize函数分开分别处理这个类的初始化,construct里面放prototype也就是公共的部分,initialize里面是每个对象特殊的部分.这样我们先建立一个类不initialize,以后每次clone这个类再进行initialize就可以了.

DesignPattern_Java:Prototype Pattern

原型模式 Prototype Pattern Specify the kinds of objects to create using a prototypical instance,and create new objects by copying this prototype. 用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象. Java内置克隆机制: 实现Cloneable接口 覆盖Object的clone()方法. 抽象原型角色(Prototype):该角色是一个抽象角色,

深入浅出设计模式 ------ Prototype(原型模式)之深度克隆

继上篇深入浅出设计模式 ------ Prototype(原型模式)的浅克隆实现, 本文进入Prototype(原型模式)的进阶篇----深度克隆. 深度克隆 ---- 序列化方式实现 把对象写到流里的过程是序列化(Serilization)过程,而把对象从流中读出来的过程则叫做反序列化(Deserialization).写在流里的是对象的一个克隆(新的, 独立的), 而原对象仍存在于JVM内存模型里.因此, 以下代码采用序列化方式实现深度克隆. 第一步: 将上篇的代码做些许改动, 加入对象引用

4,原型模式(Prototype Pattern)实际上就是动态抽取当前对象运行时的状态。

原型模式(Prototype Pattern)  实际上就是动态抽取当前对象运行时的状态. Prototype模式是一种对象创建型模式,它采取复制原型对象的方法来创建对象的实例.使用Prototype模式创建的实例,具有与原型一样的数据. 1)由原型对象自身创建目标对象.也就是说,对象创建这一动作发自原型对象本身. 2)目标对象是原型对象的一个克隆.也就是说,通过Prototype模式创建的对象,不仅仅与原型对象具有相同的结构,还与原型对象具有相同的值. 3)根据对象克隆深度层次的不同,有浅度克

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

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

24种设计模式--原型模式【Prototype Pattern】

今天我们来讲原型模式,这个模式的简单程度是仅次于单例模式和迭代器模式,非常简单,但是要使用好这个模式还有很多注意事项.我们通过一个例子来解释一下什么是原型模式. 现在电子账单越来越流行了,比如你的信用卡,到月初的时候银行就会发一份电子邮件到你邮箱中,说你这个月消费了多少,什么时候消费的,积分是多少等等,这个是每个月发一次,但是还有一种也是银行发的邮件你肯定有印象:广告信,现在各大银行的信用卡部门都在拉拢客户,电子邮件是一种廉价.快捷的通讯方式,你用纸质的广告信那个费用多高呀,比如我今天推出一个信

.NET设计模式(6):原型模式(Prototype Pattern)(转)

概述 在软件系统中,有时候面临的产品类是动态变化的,而且这个产品类具有一定的等级结构.这时如果用工厂模式,则与产品类等级结构平行的工厂方法类也要随着这种变化而变化,显然不大合适.那么如何封装这种动态的变化?从而使依赖于这些易变对象的客户程序不随着产品类变化? 意图 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 结构图 Prototype模式结构图 生活中的例子 Prototype模式使用原型实例指定创建对象的种类.新产品的原型通常是先于全部产品建立的,这样的原型是被动的,并不