漫谈设计模式之原型模式(Prototype)

什么是原型模式?原型(Prototype)模式是一种对象创建型模式,它采取复制原型对象的方法来创建对象的实例。使用Prototype模式创建的对象实例具有与原型一样的数据。具体体现在:(1)由原型对象自身创建目标对象,也就是说,对象创建这一动作发自原型对象本身;(2)目标对象是原型对象的一个克隆,也就是说,通过原型模式创建的对象,不仅仅与原型对象具有相同的结构,还与原型对象具有相同的值。(3)根据对象克隆深度层次的不同,有浅度克隆和深度克隆之分。


原型模式的结构类图(UML图):


原型模式提供了一个通过已存在对象进行新对象创建的接口(clone)。clone()实现和具体的实现语言相关,在C++中通过拷贝(复制)构造函数实现。


原型模式主要面对的问题是“某些结构复杂的对象”的创建工作:由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却有比较稳定一致的接口。


原型模式适用的情况:一个复杂对象,具有自我复制功能,统一一套接口。


示例代码:

#include <iostream>

using namespace std;

/**
 * @brief The Prototype class
 * 原型类
 */
class Prototype
{
public:
    Prototype() {}
    virtual ~Prototype() {}

    virtual Prototype* clone()=0;
};


class ConcretePrototype : public Prototype
{
public:
    ConcretePrototype(): m_memberInt(0) {
        cout<<"ConcretePrototype()"<<endl;
    }
    virtual ~ConcretePrototype() {}

    //拷贝构造函数
    ConcretePrototype(const ConcretePrototype& other)
    {
        cout<<"ConcretePrototype(const ConcretePrototype& other)"<<endl;
        m_memberInt = other.m_memberInt;
    }

    //复制自己
    virtual Prototype* clone() {
        return new ConcretePrototype(*this);
    }

private:
    int m_memberInt;

};

int main()
{

    //new 一个具体原型对象
    Prototype* concreteProA = new ConcretePrototype();
    //通过已有原型对象克隆(复制)出一个新的对象
    Prototype* concreteProB = concreteProA->clone();
    Prototype* concreteProC = concreteProB->clone();

    delete concreteProA; concreteProA = NULL;
    delete concreteProB; concreteProB = NULL;
    delete concreteProC; concreteProC = NULL;

    return 0;
}


运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值