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

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)结构型模式。关注对象间关系,涉及对象组合以获得更灵活的结构。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第8主要介绍C++中的文件操作,包括文件的打开、读写、关闭等基本操作。下面是一些重点内容: 1. 文件的打开 可以使用fstream库中的ifstream、ofstream、fstream三个类分别表示输入文件流、输出文件流、输入输出文件流。它们的构造函数可以传入文件名和打开模式,例如: ```c++ #include <fstream> using namespace std; int main() { // 打开一个文本文件用于输入 ifstream input("input.txt"); if (!input) { cout << "打开文件失败!" << endl; return 1; } // 打开一个文本文件用于输出 ofstream output("output.txt"); if (!output) { cout << "打开文件失败!" << endl; return 1; } // 打开一个文本文件用于输入输出 fstream io("data.txt", ios::in | ios::out); if (!io) { cout << "打开文件失败!" << endl; return 1; } // ... } ``` 2. 文件的读写 使用文件流对象的<<、>>、getline等操作符进行读写。例如: ```c++ #include <fstream> #include <iostream> using namespace std; int main() { // 打开一个文本文件用于输入 ifstream input("input.txt"); if (!input) { cout << "打开文件失败!" << endl; return 1; } // 打开一个文本文件用于输出 ofstream output("output.txt"); if (!output) { cout << "打开文件失败!" << endl; return 1; } int x; input >> x; // 从文件中读取一个整数 output << "x = " << x << endl; // 将x输出到文件中 string line; getline(input, line); // 从文件中读取一行字符串 output << line << endl; // 将字符串输出到文件中 // ... } ``` 3. 文件的关闭 使用文件流对象的close()方法来关闭文件。例如: ```c++ #include <fstream> using namespace std; int main() { // 打开一个文本文件用于输入 ifstream input("input.txt"); if (!input) { cout << "打开文件失败!" << endl; return 1; } // 关闭文件 input.close(); } ``` 以上是标准C++程序设计第8文件操作的一些重点内容,希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值