常见设计模式解析和实现(C++)Prototype模式(原型模式)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 作用:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 UML结构图:   抽象基类: 1)  Prototype:虚拟基类,所有原型的基类,提供Clone接口函数 接口函数: 1)  Prototype::Clone函数:纯虚函数,根据不同的派生类来实例化创建对象。

作用:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

UML结构图:


 

抽象基类:

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

接口函数:

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

解析:

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

实现:

1)Prototype.h

 

[cpp]  view plain copy
  1. #ifndef PROTOTYPE_H  
  2. #define PROTOTYPE_H  
  3.   
  4. // 虚拟基类,所有原型的基类,提供Clone接口函数  
  5.   
  6.   
  7. class Prototype  
  8. {  
  9. public:  
  10.     prototype(){}  
  11.     virtual ~Prototype(){}  
  12.   
  13.     virtual Prototype *Clone() = 0;  
  14. };  
  15.   
  16.   
  17.   
  18. // 派生自Prototype,实现Clone方法  
  19. class ConcreatePrototype1:public Prototype  
  20. {  
  21. public:  
  22.     ConcreatePrototype1();  
  23.     ConcreatePrototype1(const ConcreatePrototype1&);  
  24.     virtual ~ConcreatePrototype1();  
  25.   
  26.     virtual Prototype* Clone();  
  27. };  
  28.   
  29. // 派生自Prototype,实现Clone方法  
  30. class ConcreatePrototype2:public Prototype  
  31. {  
  32. public:  
  33.     ConcreatePrototype2();  
  34.     ConcreatePrototype2(const ConcreatePrototype2&);  
  35.     virtual ~ConcreatePrototype1();  
  36.   
  37.     virtual Prototype* Clone();  
  38. };  
  39.   
  40. #endif  

 (2)Prototype.cpp

 

[cpp]  view plain copy
  1. #include "Prototype.h"  
  2. #include <iostream>  
  3.   
  4. ConcreatePrototype1::ConcreatePrototype1()  
  5. {  
  6.     std::cout << "construction of ConcreatePrototype1\n";  
  7. }  
  8.   
  9.   
  10. ConcreatePrototype1::~ConcreatePrototype1()  
  11. {  
  12.     std::cout << "destruction of ConcreatePrototype1\n";  
  13. }  
  14.   
  15. ConcreatePrototype1::ConcreatePrototype1(const ConcreatePrototype1&)  
  16. {  
  17.     std::cout << "copy construction of ConcreatePrototype1\n";  
  18. }  
  19.   
  20. Prototype* ConcreatePrototype1::Clone()  
  21. {  
  22.     return new ConcreatePrototype1(*this);  
  23. }  
  24.   
  25.   
  26.   
  27. ConcreatePrototype2::ConcreatePrototype2()  
  28. {  
  29.     std::cout << "construction of ConcreatePrototype2\n";  
  30. }  
  31.   
  32.   
  33. ConcreatePrototype2::~ConcreatePrototype2()  
  34. {  
  35.     std::cout << "destruction of ConcreatePrototype2\n";  
  36. }  
  37.   
  38. ConcreatePrototype2::ConcreatePrototype2(const ConcreatePrototype2&)  
  39. {  
  40.     std::cout << "copy construction of ConcreatePrototype2\n";  
  41. }  
  42.   
  43. Prototype* ConcreatePrototype2::Clone()  
  44. {  
  45.     return new ConcreatePrototype2(*this);  
  46. }  
(3)main.cpp

[cpp]  view plain copy
  1. #include "Prototype.h"  
  2. #include <stdio.h>  
  3.   
  4.   
  5.   
  6. int main()  
  7. {  
  8.     Prototype* pPrototype1 = new ConcreatePrototype1();  
  9.     Prototype* pPrototype2 = pPrototype1->Clone();  
  10.   
  11.     Prototype* pPrototype3 = new ConcreatePrototype2();  
  12.     Prototype* pPrototype4 = pPrototype3->Clone();  
  13.   
  14.     delete pPrototype1;  
  15.     delete pPrototype2;  
  16.     delete pPrototype3;  
  17.     delete pPrototype4;  
  18. }  
目录
相关文章
|
19天前
|
自然语言处理 编译器 Linux
|
24天前
|
自然语言处理 编译器 Linux
告别头文件,编译效率提升 42%!C++ Modules 实战解析 | 干货推荐
本文中,阿里云智能集团开发工程师李泽政以 Alinux 为操作环境,讲解模块相比传统头文件有哪些优势,并通过若干个例子,学习如何组织一个 C++ 模块工程并使用模块封装第三方库或是改造现有的项目。
|
1月前
|
设计模式 PHP 开发者
PHP中的设计模式:桥接模式的解析与应用
在软件开发的浩瀚海洋中,设计模式如同灯塔一般,为开发者们指引方向。本文将深入探讨PHP中的一种重要设计模式——桥接模式。桥接模式巧妙地将抽象与实现分离,通过封装一个抽象的接口,使得实现和抽象可以独立变化。本文将阐述桥接模式的定义、结构、优缺点及其应用场景,并通过具体的PHP示例代码展示如何在实际项目中灵活运用这一设计模式。让我们一起走进桥接模式的世界,感受它的魅力所在。
|
1月前
|
设计模式 算法 PHP
PHP中的设计模式:策略模式的深入解析与实践
【10月更文挑战第9天】 策略模式是一种行为设计模式,它允许在运行时选择算法的行为。在PHP开发中,通过使用策略模式,我们可以轻松切换算法或逻辑处理方式而无需修改现有代码结构。本文将深入探讨策略模式的定义、结构以及如何在PHP中实现该模式,并通过实际案例展示其应用价值和优势。
30 1
|
1月前
|
设计模式 算法 PHP
PHP中的设计模式:策略模式的深入解析与实践
【10月更文挑战第12天】 在软件开发的世界中,设计模式是解决常见问题的最佳实践。它们不是具体的代码,而是一种编码和设计经验的总结。在PHP开发中,合理运用设计模式可以极大地提高代码的可维护性、扩展性和复用性。本文将深入探讨策略模式(Strategy Pattern)的原理、实现方式及其在PHP中的应用。通过具体示例,我们将展示如何利用策略模式来解耦算法与对象,从而让代码更加灵活和易于管理。
19 0
|
1月前
|
设计模式 存储 安全
PHP中的设计模式:单例模式的深入解析与实践
在PHP开发中,设计模式是提高代码可维护性、扩展性和重用性的关键技术之一。本文将深入探讨单例模式(Singleton Pattern)的原理、实现方式及其在PHP中的应用,同时通过实例展示如何在具体的项目场景中有效利用单例模式来管理和组织对象,确保全局唯一性的实现和最佳实践。
|
1月前
|
设计模式 存储 算法
PHP中的设计模式:策略模式的深入解析与实践
【10月更文挑战第9天】 在PHP开发领域,设计模式是提升代码可维护性、扩展性和重用性的关键技术之一。本文聚焦于策略模式这一行为型设计模式,通过理论阐述与实例分析,揭示其在PHP应用程序中优化算法切换和业务逻辑解耦方面的强大效用。不同于常规摘要,本文不直接概述研究方法或结果,而是基于实际开发场景,探讨策略模式的应用价值和实现方式,旨在为PHP开发者提供一种高效应对复杂业务需求变化和技术债务累积问题的策略思维。
|
19天前
|
设计模式 安全 Java
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
|
2月前
|
设计模式 数据库连接 PHP
PHP中的设计模式:提升代码的可维护性与扩展性在软件开发过程中,设计模式是开发者们经常用到的工具之一。它们提供了经过验证的解决方案,可以帮助我们解决常见的软件设计问题。本文将介绍PHP中常用的设计模式,以及如何利用这些模式来提高代码的可维护性和扩展性。我们将从基础的设计模式入手,逐步深入到更复杂的应用场景。通过实际案例分析,读者可以更好地理解如何在PHP开发中应用这些设计模式,从而写出更加高效、灵活和易于维护的代码。
本文探讨了PHP中常用的设计模式及其在实际项目中的应用。内容涵盖设计模式的基本概念、分类和具体使用场景,重点介绍了单例模式、工厂模式和观察者模式等常见模式。通过具体的代码示例,展示了如何在PHP项目中有效利用设计模式来提升代码的可维护性和扩展性。文章还讨论了设计模式的选择原则和注意事项,帮助开发者在不同情境下做出最佳决策。
|
21天前
|
设计模式 开发者 Python
Python编程中的设计模式:工厂方法模式###
本文深入浅出地探讨了Python编程中的一种重要设计模式——工厂方法模式。通过具体案例和代码示例,我们将了解工厂方法模式的定义、应用场景、实现步骤以及其优势与潜在缺点。无论你是Python新手还是有经验的开发者,都能从本文中获得关于如何在实际项目中有效应用工厂方法模式的启发。 ###

热门文章

最新文章

  • 1
    C++一分钟之-设计模式:工厂模式与抽象工厂
    43
  • 2
    《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)
    48
  • 3
    C++一分钟之-C++中的设计模式:单例模式
    58
  • 4
    《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)
    38
  • 5
    《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
    63
  • 6
    Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
    58
  • 7
    Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
    42
  • 8
    Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
    50
  • 9
    Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
    110
  • 10
    Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
    78
  • 推荐镜像

    更多