《C++新经典设计模式》之第1章 介绍

2023-12-13 08:43:47

1.1 概述

1.1.1 基本概念

模式,事物的标准样式或者针对特定问题的可重用解决方案。
设计模式(Design Pattern):

  • 反复使用的代码设计经验的总结。
  • 提高开发效率的编程方法。
  • 常见问题的通用解决方法。
  • 特定问题发生时的可重用解决方案。
  • 描述模块或类对象间关系、职责,以及它们之间的分工与合作。
  • 保证模块间的代码灵活性和可复用性,增加了复杂性。
  1. 灵活性(可扩展性/低耦合性)
    游戏中人物和衣服分开。修改现有代码不影响其他部分代码(修改代码集中在一起)。增加内容时,不或少修改已有内容。
  2. 可复用性
    可重复用,被多处调用。多态性。

1.1.2 抽象思维

  • 耦合:模块相互依赖,互相影响。
  • 解耦合:切断模块的依赖关系,一个模块的更改不会影响另一个模块。
  1. 概念
    从事物中抽取或提炼本质、共性的内容组合(封装)到一起。
    分解法:复杂事物分解成若干简单事物。
    抽象法:简单事物抽象出本质内容并封装起来。
  2. 目的
    减少代码重复性,方便代码的扩展。
    稳定的、不怎么变化的内容作为模块,单独定义。
    变化的部分放到子类中去实现。
  3. 检验
    项目需求发生更改,不更改现有代码,增加新代码应对需求变更。
    继承:
    (1)抽象机制——抽取本质的、共性的内容放到基类中;
    (2)可重用机制——基类中的内容,直接拿过来使用。
    类内容太多,进一步拆分。单一职责原则,一个类只干好一个事情,承担一种职责。

1.1.3 存在问题

  1. 不会用
    忘记设计模式,先面对具体要解决的问题。
    遇到问题👉笨重方法解决👉设计模式解决
  2. 滥用
    遵守原则:
  • 不要过度设计,没必要考虑太长久。
  • 设计很主观,非一步到位,不断调整和修改,重构。
  • 考虑模式适合,代码实用性和易读性更重要。
  1. 无用论
    代码量多时,后期难以扩展和维护。

1.1.4 缺点

  • 增加程序书写的复杂性。
  • 增加学习和理解的负担。
  • 一定程度上降低程序的运行效率。

1.1.5 应用与学习方法

  1. 日常小项目
    用得少。
  • 代码少,需求变动时,修改代码方便。
  • 逻辑功能单一,不需考虑复用。
  • 可能无意中使用了设计模式。
  1. 大项目与框架类项目
  • 掌握设计模式概念和具体解决问题,遇到问题时快速识别和运用。
  • 编写测试代码并体验该模式的工作过程。
  • 思考和总结设计经验,及时调整和更改不合理部分。
  • 采用设计模式实战,注意模式之间的关联和配合。

1.1.6 学习态度与方法

寻找和总结经常发生变化的场所。

1.2 思想与分类

1.2.1 软件开发思想

  1. 基本思想
    (1)需求分析、架构设计,需求文档,规划设计文档。
    (2)划分模块(子系统),类划分,确定接口,迭代过程。
    (3)可维护性和可扩展性。降低模块之间的耦合度(解耦)。
  2. 与微服务架构的区别
    微服务器从功能上拆分成多个小程序,彼此之间通过架构方式,配合起来共同实现业务需求。

1.2.2 设计模式分类

设计模式分类设计模式名称
行为型模式模板方法(Template Method)模式
策略(Strategy)模式
观察者(Observer)模式
命令(Command)模式
迭代器(Iterator)模式
状态(State)模式
中介者(Mediator)模式
备忘录(Memento)模式
责任链(Chain Of Responsibility)模式
访问者(Visitor)模式
解释器(Interpreter)模式
创建型模式简单工厂(Simple Factory)模式
工厂方法(Factory Method)模式
抽象工厂(Abstract Factory)模式
原型(Prototype)模式
建造者(Builder)模式
单例(Singleton)模式
结构型模式装饰(Decorator)模式
外观(Facade)模式
组合(Composite)模式
亨元(Flyweight)模式
代理(Proxy)模式
适配器(Adapter)模式
桥接(Bridge)模式

(1)行为型模式。关注对象行为或交互,涉及算法和对象的职责分配。通过对象组合,描述一组对象如何协作完成任务。
(2)创建型模式。对象的创建和使用分离(解耦)。
(3)结构型模式。关注对象间关系,涉及对象组合以获得更灵活的结构。

文章来源:https://blog.csdn.net/oqqyx1234567/article/details/134868736
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。