看动画,轻松学习23种C++设计模式完结无密

爱学it学无止境
• 阅读 227

C++设计模式深度解析:提升代码质量与可维护性的关键 在C++软件开发中,设计模式作为一种经过验证的软件开发方法,被广泛用于解决常见的设计问题,提高代码的可读性、可维护性和可扩展性。本文将深入探讨C++中几种常用的设计模式,分析其原理、应用场景及实现方式,以期为开发者提供实用的参考。

  1. 单例模式(Singleton Pattern) 单例模式确保一个类仅有一个实例,并提供一个全局访问点。在C++中,实现单例模式通常涉及私有构造函数、析构函数和拷贝构造函数,以及一个静态的公有方法用于获取类的唯一实例。随着C++11标准的发布,局部静态变量的线程安全初始化特性为单例模式的实现提供了更简洁的方式。

实现示例 cpp class Singleton {
private:
Singleton() {}
~Singleton() {}
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;

public:
static Singleton& getInstance() {
static Singleton instance;
return instance;
}
}; 2. 工厂模式(Factory Pattern) 工厂模式是一种创建型设计模式,用于创建对象而不将具体类的代码与客户端代码耦合。在C++中,工厂模式通常通过定义一个接口(或抽象类)来指定创建对象的接口,但让子类决定实例化哪一个类。

实现示例 cpp class Product {
public:
virtual void show() = 0;
virtual ~Product() {}
};

class ConcreteProduct : public Product {
public:
void show() override {
std::cout << "I am a ConcreteProduct" << std::endl;
}
};

class Creator {
public:
virtual Product* createProduct() = 0;
virtual ~Creator() {}
};

class ConcreteCreator : public Creator {
public:
Product* createProduct() override {
return new ConcreteProduct();
}
}; 3. 适配器模式(Adapter Pattern) 适配器模式是一种结构型设计模式,用于将一个类的接口转换成客户端期望的另一个接口,使原本由于接口不兼容而不能一起工作的类可以一起工作。

实现示例 cpp class Target {
public:
virtual void request() = 0;
virtual ~Target() {}
};

class Adaptee {
public:
void specificRequest() {
std::cout << "Called specificRequest()" << std::endl;
}
};

class Adapter : public Target {
private:
Adaptee* adaptee;

public:
Adapter(Adaptee* a) : adaptee(a) {}

void request() override {  
    adaptee->specificRequest();  
}  

}; 4. 享元模式(Flyweight Pattern) 享元模式是一种结构型设计模式,它通过共享技术来支持大量细粒度的对象,从而减少内存占用和提高性能。在C++中,享元模式通常涉及将对象的状态分为内部状态和外部状态,内部状态可以在多个对象之间共享,而外部状态则不能。

实现示例 cpp #include
#include

class Font {
private:
std::string key;

public:
Font(const std::string& k) : key(k) {}
// 假设还有其他方法...
};

class FontFactory {
private:
std::map<std::string, Font*> fontPool;

public:
Font* GetFont(const std::string& key) {
auto it = fontPool.find(key);
if (it != fontPool.end()) {
return it->second;
} else {
Font* font = new Font(key);
fontPool[key] = font;
return font;
}
}
}; 总结 C++中的设计模式是提升代码质量和可维护性的重要工具。通过合理使用设计模式,如单例模式、工厂模式、适配器模式和享元模式等,开发者可以更加灵活地构建系统,减少代码耦合,提高代码复用性和可扩展性。在设计复杂系统时,合理选择和运用设计模式,可以显著降低开发难度,提升软件的整体质量。

点赞
收藏
评论区
推荐文章
徐小夕 徐小夕
4年前
15分钟带你了解前端工程师必知的javascript设计模式(附详细思维导图和源码)
前言设计模式是一个程序员进阶高级的必备技巧,也是评判一个工程师工作经验和能力的试金石.设计模式是程序员多年工作经验的凝练和总结,能更大限度的优化代码以及对已有代码的合理重构.作为一名合格的前端工程师,学习设计模式是对自己工作经验的另一种方式的总结和反思,也是开发高质量,高可维护性,可扩展性代码的重要手段.我们所熟知的金典的几大框架,比如jquery,
徐小夕 徐小夕
4年前
《前端实战总结》之迭代器模式的N+1种应用场景
眼看12月就来了,抓住今年的尾巴,好好总结一下前端的不足与收获。这篇文章是笔者写设计模式专题的第二篇文章,也是基于工作中的总结和提炼,在实际应用场景中都会大量使用,至于为什么要写设计模式,主要是为了提高团队代码质量和可维护性,后续会继续推出设计模式相关的文章,供大家参考和学习。你将学到迭代器模式的含义实现一个数组迭代器实现一个对象迭代器
Wesley13 Wesley13
3年前
java24种设计模式
一、设计模式定义  设计模式(DesignPattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解并且保证代码可靠性。二、设计模式分类  经典模式只有23个(还有简单工厂模式),它们各具特色,每个模式都为某一个可重复的设计问题提供了一套解决方案。  根据它们的用
亚瑟 亚瑟
3年前
说说设计模式
设计模式设计模式(Designpattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总
架构师日记-深入理解软件设计模式 | 京东云技术团队
本文从设计模式与编程语言的关系,设计模式与架构模式的区别,设计原则和设计模式的关系等几个维度进行了分析和解答。关于设计模式应该如何学习和应用的问题,给出了学习意见和实践心得。
Wesley13 Wesley13
3年前
00_设计模式之语言选择
设计模式之语言选择设计模式简介背景设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。设计模式(Designpattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的
Wesley13 Wesley13
3年前
PHP常用的5大设计模式
设计模式(Designpattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。1.单例模式单例模式(Singlet
Wesley13 Wesley13
3年前
JavaWeb之动态代理解决request请求编码问题
动态代理解决编码问题1.设计模式出现原因:软件开发过程中,遇到相似问题,将问题的解决方法抽取模型(套路)常见设计模式:单例,工厂,适配器,装饰者,动态代理。2.装饰者模式简单介绍谷歌汽车开发场景1.Java定义了汽车开发约定interfaceICar{s
京东云开发者 京东云开发者
3个月前
还在自己实现责任链?我建议你造轮子之前先看看这个开源项目
1.前言设计模式在软件开发中被广泛使用。通过使用设计模式,开发人员可以更加高效地开发出高质量的软件系统,提高代码的可读性、可维护性和可扩展性。责任链模式是一种常用的行为型设计模式,它将请求沿着处理链进行发送,直到其中一个处理者对请求进行处理为止。在责任链模