随笔分类 - C++设计模式和数据结构
摘要:算法与数据结构索引 https://www.cnblogs.com/kaituorensheng/p/3522017.html?spm=a2c4e.10696291.0.0.8d4119a4SmSgqO 判断一棵树是否为另一棵树的子树 https://www.cnblogs.com/anzhsoft
阅读全文
摘要:程序中,用基类类型指针,可以生成一个连接不同派生类对象的动态链表, 即每个节点指针可以指向类层次中不同的派生类对象。 这种节点类型不相同的链表称为异质链表。 如:任务管理器,管理不同的进程
阅读全文
摘要:循环队列:具有队头指针和队尾指针,指示队列元素所在的位置,避免删除元素时移动大量元素。 循环队列特性: 只能队尾插入元素、在队头删除元素。 先进先出(First In First Out)的线性表,先进入的元素出队,后进入的元素才能出队。 优点: 相比普通的队列,元素出队时无需移动大量元素,只需移动
阅读全文
摘要:随着交通信号灯的变化,汽车的行为也将随之而变化,一盏交通信号灯可以指挥多辆汽车。 观察者模式是用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应。 在观察者模式中,发生改变的对象称为观察目标,而被通知的对象称为观察者, 一个观察目标可以对应多个观察者,
阅读全文
摘要:Context(环境类): 环境类是使用算法的角色,它在解决某个问题(即实现某个方法)时可以采用多种策略。 在环境类中维持一个对抽象策略类的引用实例,用于定义所采用的策略。 Strategy(抽象策略类): 它为所支持的算法声明了抽象方法,是所有策略类的父类,它可以是抽象类或具体类,也可以是接口。环
阅读全文
摘要:将一个请求封装为一个对象,从而让我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。 命令模式是一种对象行为型模式,其别名为动作(Action)模式或事务(Transaction)模式。命令模式可以将请求发送者和接收者完全解耦, 发送者与接收者之间没有直接引用关系,
阅读全文
摘要:AbstractClass(抽象类):在抽象类中定义了一系列基本操作(PrimitiveOperations),这些基本操作可以是具体的,也可以是抽象的, 每一个基本操作对应算法的一个步骤,在其子类中可以重定义或实现这些步骤。同时,在抽象类中实现了一个模板方法(Template Method), 用
阅读全文
摘要:将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 Target(目标抽象类):目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以是具体类。Adapter(适配器类):适配器可以调用另一个接口,作为一个转换器,对Adaptee和Target进
阅读全文
摘要:根据迪米特法则,如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。Facade模式也叫外观模式,是由GoF提出的23种设计模式中的一种。Facade模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单的界面。这个一致的简单的界面被称作facade。 Façade(
阅读全文
摘要:如果可以通过已经存在的类,额外添加一个功能生成一个新的类,这种类就是一个装饰器 装饰模式(Decorator Pattern):动态地给一个对象增加一些额外的职责,就增加对象功能来说, 装饰模式比生成子类实现更为灵活。装饰模式是一种对象结构型模式。 Component(抽象构件):它是具体构件和抽象
阅读全文
摘要:让类和类进行组合,获得更大的结构。 Proxy模式又叫做代理模式,是构造型的设计模式之一,它可以为其他对象提供一种代理(Proxy)以控制对这个对象的访问。所谓代理,是指具有与代理元(被代理的对象)具有相同的接口的类,客户端必须通过代理与被代理的目标类交互,而代理一般在交互的过程中(交互前后),进行
阅读全文
摘要:定义:保证一个类、只有一个实例存在,同时提供能对该实例加以访问的全局访问方法。 单例模式:如Windows的任务管理器 三个要点: 一是某个类只能有一个实例; 二是它必须自行创建这个实例; 三是它必须自行向整个系统提供这个实例 Singleton(单例):在单例类的内部实现只生成一个实例,同时它提供
阅读全文
摘要:工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题, 但由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销。 此时,我们可以考虑将一些相关的产品组成一个“产品族”,由同一个工厂来统一生产 抽象工厂(Abstract Factor
阅读全文
摘要:简单工厂模式 + “开闭原则” = 工厂方法模式 抽象工厂(Abstract Factory)角色:工厂方法模式的核心,任何工厂类都必须实现这个接口。工厂(Concrete Factory)角色:具体工厂类是抽象工厂的一个实现,负责实例化产品对象。抽象产品(Abstract Product)角色:工
阅读全文
摘要:工厂(Factory)角色:简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。抽象产品(AbstractProduct)角色:简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。具体产品(Concrete Product)角色:简
阅读全文
摘要:在一定环境下,用固定模式解决问题。 设计模式目前种类:GoF的23种 + “简单工厂模式” = 24种 包括: 创建型(Creational)模式:如何创建对象,6种 结构性(Structual)模式:如何实现类或对象的组合,7种 行为型(Behavioral)模式:类或对象怎样交互以及怎样分配职责
阅读全文
摘要:排序:稳定排序算法,不稳定排序算法 如上图,若两个5排序之后交换了位置就是不稳定的,没有交换位置就是稳定排序 1.选择排序 冒泡是相邻的两个交换,选择法是首元素与最小的交换。 2.冒泡排序 冒泡算法的优化,在待排序数据处于一种趋于有序的情况,可以减少判断次数,比如:1,2,3,4,7,5,6 3.插
阅读全文
摘要:二叉树: 叶子节点:没有左孩子也没有右孩子 叶子节点的个数 = 左子树叶子节点个数 + 右子树叶子节点个数 树的高度 : 1.求根节点左子树的高度,再求根节点右子树的高度,比较子树的最大高度再加 1; 2.若左子树还是树,重复步骤1;若右子树还是树,重复步骤1 拷贝二叉树 树的非递归遍历 (中序遍历
阅读全文