蜗牛的家
男儿当自强
C++博客
首页
新文章
新随笔
聚合
管理
posts - 48, comments - 21, trackbacks - 0
C++设计模式-Prototype
意图:
用原型指定创建对象的种类,并且通过拷贝函数用这些原型创建对象
适用:
当要实例化的类是在运行时刻指定时,例如:通过动态装载
为了避免创建一个与产品类层次平行的工厂类层次时
当一个类的实例只能有几个不同状态组合中的一种时,建立相应数目的原型并克隆可能要更方便些
UML图:
解析:Prototype类似车辆的展示,当你喜欢某款车时,他们会给你一款相同款式的车,像软件中的复制,而不是车展的那辆
//
test.h
/**/
////////////////////////////////////////////////////////////////////////
//
//
虚基类,提供基本函数
class
Prototype
{
public
:
Prototype()
{}
virtual
~
Prototype()
{}
virtual
Prototype
*
Clone()
=
0
;
}
;
//
派生出来的类,实现具体的Clone函数
class
ConCreatePrototype1 :
public
Prototype
{
public
:
ConCreatePrototype1();
ConCreatePrototype1(
const
ConCreatePrototype1
&
);
//
拷贝构造函数,通过这个函数实现类的复制
~
ConCreatePrototype1();
virtual
Prototype
*
Clone();
//
复制出相同对象的接口
}
;
//
test.cpp : Defines the entry point for the console application.
//
#include
"
stdafx.h
"
#include
<
iostream
>
#include
"
stdlib.h
"
#include
"
test.h
"
using
namespace
std;
/**/
////////////////////////////////////////////////////////////////////////
//
ConCreatePrototype1::ConCreatePrototype1()
{
cout
<<
"
construction of ConCreatePrototype1\n
"
;
}
ConCreatePrototype1::
~
ConCreatePrototype1()
{
cout
<<
"
destruction of ConCreatePrototype1\n
"
;
}
ConCreatePrototype1::ConCreatePrototype1(
const
ConCreatePrototype1
&
)
{
cout
<<
"
copy a same object as ConCreatePrototype1\n
"
;
}
Prototype
*
ConCreatePrototype1::Clone()
{
return
new
ConCreatePrototype1(
*
this
);
}
/**/
////////////////////////////////////////////////////////////////////////
//
int
main(
int
argc,
char
*
argv[])
{
Prototype
*
pPrototype
=
new
ConCreatePrototype1;
Prototype
*
pPrototype2
=
pPrototype
->
Clone();
delete pPrototype;
delete pPrototype2;
system(
"
pause
"
);
return
0
;
}
posted on 2008-08-17 01:16
黑色天使
阅读(518)
评论(0)
编辑
收藏
引用
所属分类:
设计模式
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
decorator模式
MVC模式理解——当年给我一个browser多好(转)
C++设计模式-趣解
C++设计模式-visitor
C++设计模式-Memento
C++模式-Iterator
C++设计模式-Observer
C++设计模式-Command
C++模式-FlyWeight
C++设计模式-ChainOfResponsibility
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
<
2008年8月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(2)
给我留言
查看公开留言
查看私人留言
随笔分类
C\C++(8)
Hacker(1)
STL
VC&MFC(4)
操作系统(1)
多进程&多线程
流媒体开发
内存管理技术(2)
软件工程(1)
设计模式(20)
数据结构&算法(2)
网络开发(3)
随笔档案
2011年4月 (1)
2011年3月 (2)
2009年7月 (1)
2009年6月 (2)
2009年3月 (1)
2009年2月 (3)
2009年1月 (3)
2008年12月 (5)
2008年11月 (1)
2008年10月 (3)
2008年9月 (3)
2008年8月 (23)
文章档案
2011年3月 (1)
2009年6月 (1)
2008年11月 (1)
搜索
最新评论
1. re: C++设计模式-Observer
评论内容较长,点击标题查看
--no7dw
2. re: YUV格式详细解释与FFMPEG的关系
评论内容较长,点击标题查看
--windsome
3. re: 键盘过滤驱动源代码
@soul
再怎么懒也应该自己实现一部分吧
--黑色天使
4. re: 键盘过滤驱动源代码[未登录]
再怎么懒也该加上unload例程吧
--soul
5. re: CHttpDownLoad Beta 1.0
评论内容较长,点击标题查看
--tangxinfa
阅读排行榜
1. RGB、YUY2、YUYV、YVYU、UYVY与AYUV(转)(6632)
2. YUV格式详细解释与FFMPEG的关系(4284)
3. 如何检测内存泄漏(转)(3880)
4. memcpy的BUG(2694)
5. CHttpDownLoad Beta 1.0(2314)
评论排行榜
1. CHttpDownLoad Beta 1.0(10)
2. memcpy的BUG(5)
3. 事件模型SOCKET封装(2)
4. 键盘过滤驱动源代码(2)
5. C++设计模式-Observer(1)