首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > 常见设计模式的解析和实现(四)-Prototype模式
【标  题】:常见设计模式的解析和实现(四)-Prototype模式
【关键字】:-Prototype
【来  源】:http://www.cppblog.com/converse/archive/2006/07/21/10307.html

常见设计模式的解析和实现(四)-Prototype模式

C++博客 - 创系的技术博客 - 常见设计模式的解析和实现(四)-Prototype模式
有勇气来改变可以改变的事情,有胸怀来接受不可改变的事情,有智慧来分辨两者的不同。
作用:
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

抽象基类:
1)Prototype:虚拟基类,所有原型的基类,提供Clone接口函数

接口函数:
1)Prototype::Clone函数:纯虚函数,根据不同的派生类来实例化创建对象.

解析:
Prototype模式其实就是常说的"虚拟构造函数"一个实现,C++的体制中并没有支持这个特性的机制,但是通过不同派生类实现的Clone接口函数可以完成与"虚拟构造函数"同样的效果.举一个例子来解释这个模式的作用,假设有一家店铺是配钥匙的,他对外提供配制钥匙的服务(提供Clone接口函数),你需要配什么钥匙它不知道只是提供这种服务,具体需要配什么钥匙只有到了真正看到钥匙的原型才能配好.也就是说,需要一个提供这个服务的对象,同时还需要一个原型(Prototype),不然不知道该配什么样的钥匙.

实现:
1)Prototype.h
/********************************************************************
????created:????2006/07/20
????filename:?????Prototype.h
????author:????????李创
????????????????
http://www.cppblog.com/converse/

????purpose:????Prototype模式的演示代码
********************************************************************
*/


#ifndef?PROTOTYPE_H
#define?PROTOTYPE_H

//?虚拟基类,所有原型的基类,提供Clone接口函数
class?Prototype
{
public:
????Prototype()
{}
????
virtual?~Prototype(){}

????
virtual?Prototype*?Clone()?=?0;
}
;

//?派生自Prototype,实现Clone方法
class?ConcreatePrototype1
????:?
public?Prototype
{
public:
????ConcreatePrototype1();
????ConcreatePrototype1(
const?ConcreatePrototype1&);
????
virtual?~ConcreatePrototype1();

????
virtual?Prototype*?Clone();
}
;

//?派生自Prototype,实现Clone方法
class?ConcreatePrototype2
????:?
public?Prototype
{
public:
????ConcreatePrototype2();
????ConcreatePrototype2(
const?ConcreatePrototype2&);
????
virtual?~ConcreatePrototype2();

????
virtual?Prototype*?Clone();
}
;

#endif

2)Prototype.cpp
/********************************************************************
????created:????2006/07/20
????filename:?????Prototype.cpp
????author:????????李创
????????????????
http://www.cppblog.com/converse/

????purpose:????Prototype模式的演示代码
********************************************************************
*/


#include?
"Prototype.h"
#include?
<iostream>

ConcreatePrototype1::ConcreatePrototype1()
{
????std::cout?
<<?"construction?of?ConcreatePrototype1\n";
}


ConcreatePrototype1::
~ConcreatePrototype1()
{
????std::cout?
<<?"destruction?of?ConcreatePrototype1\n";
}


ConcreatePrototype1::ConcreatePrototype1(
const?ConcreatePrototype1&)
{
????std::cout?
<<?"copy?construction?of?ConcreatePrototype1\n";
}


Prototype
*?ConcreatePrototype1::Clone()
{
????
return?new?ConcreatePrototype1(*this);
}


ConcreatePrototype2::ConcreatePrototype2()
{
????std::cout?
<<?"construction?of?ConcreatePrototype2\n";
}


ConcreatePrototype2::
~ConcreatePrototype2()
{
????std::cout?
<<?"destruction?of?ConcreatePrototype2\n";
}


ConcreatePrototype2::ConcreatePrototype2(
const?ConcreatePrototype2&)
{
????std::cout?
<<?"copy?construction?of?ConcreatePrototype2\n";
}


Prototype
*?ConcreatePrototype2::Clone()
{
????
return?new?ConcreatePrototype2(*this);
}

3)Main.cpp
/********************************************************************
????created:????2006/07/20
????filename:?????Main.cpp
????author:????????李创
????????????????
http://www.cppblog.com/converse/

????purpose:????Prototype模式的测试代码
********************************************************************
*/


#include?
"Prototype.h"
#include?
<stdlib.h>

int?main()
{
????Prototype
*?pPrototype1?=?new?ConcreatePrototype1();
????Prototype
*?pPrototype2?=?pPrototype1->Clone();

????Prototype
*?pPrototype3?=?new?ConcreatePrototype2();
????Prototype
*?pPrototype4?=?pPrototype3->Clone();

????delete?pPrototype1;
????delete?pPrototype2;
????delete?pPrototype3;
????delete?pPrototype4;

????system(
"pause");

????
return?0;
}
posted on 2006-07-21 13:53 创系 阅读(27) 评论(0)  编辑 收藏 收藏至365Key 所属分类: 设计模式
【相关文章】
  • 设计范式笔记-Prototype
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.