- 浏览: 370053 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (335)
- C++ (190)
- 设计模式 (43)
- 数据库技术 (5)
- 网络编程 (11)
- 自动化测试 (6)
- Linux (13)
- OpenSSL (10)
- MS Crypt API (5)
- SCM (2)
- English (4)
- Android (10)
- EMV规范 (1)
- Saturn Platform (0)
- C (10)
- SQL (2)
- ASP.NET (3)
- 英语口语学习 (3)
- 调试工具 (21)
- 编译技术 (5)
- UML (1)
- 项目管理 (5)
- 敏捷开发 (2)
- Http Server (6)
- 代码审查、代码分析 (5)
- 面试基础 (10)
- 重点知识 (16)
- STL (6)
- Efficient C++资料 (8)
- 数据结构和算法 (7)
- 读书笔记 (0)
- 开源项目 (4)
- 多线程 (2)
- Console App (6)
- 个人开源项目 (4)
- IBM DevelopWorks (4)
- Java (16)
- 内存泄漏相关调试和检测 (13)
- 软件测试相关技术 (2)
- C# (11)
- Apple Related (1)
- 软件测试和管理 (2)
- EMV (1)
- Python (1)
- Node.js (6)
- JavaScript (5)
- VUE (1)
- Frontend (1)
- Backend (4)
- RESTful API (3)
- Firebase (3)
最新评论
-
u013189503:
来个密码吧
[C++][Logging] 项目中写日志模块的实现 -
wyf_vc:
来个密码啊!!
[C++][Logging] 项目中写日志模块的实现
头文件
//PrototypePattern.h #ifndef PROTOTYPE_PATTERN_H #define PROTOTYPE_PATTERN_H #include <Windows.h> #include <string> using namespace std; namespace PrototypePattern { // Base Class ////////////////////////////////////////////////////////////////////////// class AbstractPrototype { public: AbstractPrototype(); virtual ~AbstractPrototype(); virtual AbstractPrototype* Clone() = 0; }; ////////////////////////////////////////////////////////////////////////// class ConcretePrototypeA : public AbstractPrototype { public: ConcretePrototypeA(string strName, int nId); ConcretePrototypeA(ConcretePrototypeA* pPrototypeA); virtual ~ConcretePrototypeA(); virtual AbstractPrototype* Clone(); private: string m_strName; int m_nID; }; ////////////////////////////////////////////////////////////////////////// class ConcretePrototypeB : public AbstractPrototype { public: ConcretePrototypeB(string strName, int nId); ConcretePrototypeB(ConcretePrototypeB* pPrototypeA); virtual ~ConcretePrototypeB(); virtual AbstractPrototype* Clone(); private: string m_strName; int m_nID; }; ////////////////////////////////////////////////////////////////////////// void PrototypePattern_Test_A(); void PrototypePattern_Test_B(); } #endif
实现
#include "PrototypePattern.h" #include <iostream> using namespace std; namespace PrototypePattern { ////////////////////////////////////////////////////////////////////////// AbstractPrototype::AbstractPrototype() { } AbstractPrototype::~AbstractPrototype() { } ////////////////////////////////////////////////////////////////////////// ConcretePrototypeA::ConcretePrototypeA(string strName, int nId) { m_strName = strName; m_nID = nId; } ConcretePrototypeA::ConcretePrototypeA(ConcretePrototypeA* pPrototypeA) { this->m_strName = pPrototypeA->m_strName; this->m_nID = pPrototypeA->m_nID; } ConcretePrototypeA::~ConcretePrototypeA() { } AbstractPrototype* ConcretePrototypeA::Clone() { cout << "ConcretePrototypeA::Clone\n"; cout << "m_strName=" << m_strName << "; m_nID =" << m_nID << ";\n"; return new ConcretePrototypeA(this); } ////////////////////////////////////////////////////////////////////////// ConcretePrototypeB::ConcretePrototypeB(string strName, int nId) { m_strName = strName; m_nID = nId; } ConcretePrototypeB::ConcretePrototypeB(ConcretePrototypeB* pPrototypeA) { this->m_strName = pPrototypeA->m_strName; this->m_nID = pPrototypeA->m_nID; } ConcretePrototypeB::~ConcretePrototypeB() { } AbstractPrototype* ConcretePrototypeB::Clone() { cout << "ConcretePrototypeB::Clone\n"; cout << "m_strName=" << m_strName << "; m_nID =" << m_nID << ";\n"; return new ConcretePrototypeB(this); } ////////////////////////////////////////////////////////////////////////// void PrototypePattern_Test_A() { AbstractPrototype* pPrototype1 = new ConcretePrototypeA("ConcretePrototypeA", 1); AbstractPrototype* pPrototype2 = pPrototype1->Clone(); AbstractPrototype* pPrototype3 = pPrototype2->Clone(); delete pPrototype3; pPrototype3 = NULL; delete pPrototype2; pPrototype2 = NULL; delete pPrototype1; pPrototype1 = NULL; } void PrototypePattern_Test_B() { AbstractPrototype* pPrototype1 = new ConcretePrototypeA("ConcretePrototypeB", 2); AbstractPrototype* pPrototype2 = pPrototype1->Clone(); AbstractPrototype* pPrototype3 = pPrototype2->Clone(); delete pPrototype3; pPrototype3 = NULL; delete pPrototype2; pPrototype2 = NULL; delete pPrototype1; pPrototype1 = NULL; } }
客户端
#include "PrototypePattern.h" #include <iostream> using namespace std; using namespace PrototypePattern; void main() { PrototypePattern_Test_A(); PrototypePattern_Test_B(); }
运行结果
结构类图
用例模型
设计类图
顺序图
- PrototypePattern.zip (1.1 KB)
- 下载次数: 0
- Diagram.zip (277.2 KB)
- 下载次数: 0
- Diagram-raw.zip (42.5 KB)
- 下载次数: 0
发表评论
-
FreeRTOS
2022-03-05 16:31 248Ref https://blog.csdn.net/weix ... -
串口通讯相关
2018-11-02 13:44 411https://bbs.csdn.net/wap/topics ... -
[转]C++验证IP是否可以PING通
2018-10-30 17:54 1326https://www.cnblogs.com/guoyz13 ... -
C++/MFC 換皮膚
2018-10-20 11:05 477https://blog.csdn.net/u01123991 ... -
WinCE 截屏 - C++ 代碼
2018-08-31 09:45 574// this function create a bmp ... -
Android NDK搭建環境
2017-11-27 13:25 580https://www.cnblogs.com/ut2016- ... -
8583协议相关
2017-10-17 13:38 5738583相关资料,整理中... -
Java高级应用之JNI
2017-06-19 09:00 600参考link http://www.cnblogs.com/l ... -
C++实现ping功能
2017-04-18 11:21 2155基础知识 ping的过程是向目的IP发送一个type=8的I ... -
OpenSSL 编译环境搭建
2017-03-27 15:01 9061 安裝VS2008到 c:\Program Files (x ... -
最优非对称加密填充(OAEP)
2017-03-25 14:53 1582OpenSSL命令---rsautl http://blog. ... -
[Platform Builder] 设置SVM OS build Env
2016-11-10 11:39 01 copy one OSDesign Project to ... -
[Windows] System Error Codes(GetLastError )0-----5999
2016-10-26 13:28 1881ERROR_SUCCESS 0 (0x0) T ... -
开源Windows驱动程序框架
2016-09-17 21:35 871转自 http://code.csdn.net/news/28 ... -
c/c++代码中执行cmd命令
2016-09-14 14:50 1908转自 http://blog.csdn.net/slixinx ... -
C#使用C++标准DLL实例(包含callback)
2016-09-11 19:44 1086C++编写标准Win32DLL如下 头文件 /***** ... -
C#调用C++的DLL搜集整理的所有数据类型转换方式
2016-09-09 16:07 969转自 http://www.cnblogs.com/zeroo ... -
WinCE CPU使用率计算 测试工具
2016-09-08 16:14 991转自 http://blog.csdn.net/jan ... -
switch在C++与C#中的一些差异
2016-09-08 15:19 810参考链接 http://blog.csdn.net/weiwe ... -
C++ 鼠标模拟程序
2016-09-04 12:09 1612转自 http://blog.csdn.net/weixinh ...
相关推荐
【设计模式之创建型模式实验】 创建型设计模式主要关注对象的创建,它们提供了一种在不指定具体类的情况下创建对象的方式,增强了系统的灵活性和可扩展性。在本实验中,我们将探讨五种常见的创建型设计模式:简单...
设计模式分为三大类:创建型模式、结构型模式和行为型模式。 **创建型模式**关注的是对象的创建。共有五种创建型模式: 1. **工厂方法模式**:它定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法...
本篇文章将深入探讨C#中的“原型模式”(Prototype Pattern),这是一种创建型设计模式,它允许我们通过复制已有对象来创建新对象,而不是从零开始创建。 原型模式的核心思想是克隆。在C#中,对象的克隆可以通过...
本文将深入探讨C#中的创建型模式,帮助开发者更好地理解和应用这些模式。 1. **单例模式(Singleton)** 单例模式确保一个类只有一个实例,并提供全局访问点。在C#中,我们通常通过私有构造函数和静态方法来实现...
创建型模式包括单例模式、工厂方法模式、抽象工厂模式、建造者模式和原型模式等。这些模式各有其特定的应用场景和优势。 首先,单例模式是一种常见的创建型模式,它保证一个类只有一个实例,并提供一个全局访问点。...
本篇主要聚焦于创建型模式,这是一种用来处理对象创建的技术,通过封装、抽象和多态来提供更灵活的实例化过程。 创建型模式包括五种主要类型:单例(Singleton)、工厂方法(Factory Method)、抽象工厂(Abstract ...
在本课程中,我们将深入探讨C#编程中的一个重要设计模式——Prototype原型模式,它是创建型设计模式的一种。原型模式主要用于简化实例化过程,通过复制已有对象来创建新对象,而不是直接通过构造函数来创建。这一...
创建型模式包括工厂模式、抽象工厂模式、单例模式、建造者模式和原型模式。这些模式有助于解耦代码,使得系统更易于维护和扩展。 例如,**工厂模式**是一种简单的方式,通过定义一个公共接口来创建对象,而具体的...
原型模式(Prototype Pattern)是一种创建型设计模式,它允许我们通过复制现有的对象来创建新对象,而无需知道具体创建过程的细节。这种模式的核心在于,它提供了一种对象克隆的简便方法,使得对象的创建过程对用户...
原型模式是一种创建型设计模式,它的主要思想是通过复制已有对象来创建新对象,而不是通过构造函数来创建。这种模式可以有效地减少对象创建时的开销,尤其是在需要创建大量相似对象的情况下。在Android中,原型模式...
原型模式是一种创建型设计模式,它允许我们创建对象的克隆,而无需知道具体的实现细节。在软件工程中,当我们需要创建多个相似的对象时,使用原型模式可以大大提高效率,避免了每次都去创建新的对象。这种模式是基于...
创建型模式是设计模式中的一个重要类别,它关注于对象的创建过程,帮助开发者封装创建细节,使系统独立于具体对象的创建方式。 1. **Singleton(单例模式)** 单例模式确保一个类只有一个实例,并提供全局访问点...
创建型设计模式是软件设计模式中的重要类别,主要用于对象的创建。它们提供了一种封装对象创建过程的方法,使得代码更加灵活、易于维护,并且能够更好...理解并熟练运用这些创建型模式,对提升软件设计的质量至关重要。
本文将聚焦于创建型设计模式,特别是单例模式和原型模式,这两种模式在对象的创建方面扮演着重要的角色。 单例模式是一种限制类实例化次数的设计模式,确保在整个应用程序中,一个类只有一个实例存在。这在某些场景...
本压缩包文件包含了五个关于创建型模式的UML类图,通过Enterprise Architect(EA)软件进行建模,便于理解和实现。以下是这些模式的详细说明: 1. **工厂方法模式** - `工厂模式 计算器.EAP` 工厂方法模式是创建型...
创建型模式是设计模式的一种,主要关注对象的创建过程,帮助我们在不同场景下以灵活、抽象的方式创建对象,提高代码的复用性和可读性。以下是对几种创建型模式的详细解释: 1. **抽象工厂(Abstract Factory)** ...