基础概念 工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。适用性:当一个类不知道它所必须创建的对象的类的时候。当一个类希望由它的子类来指定它所创建的对象的时候。当类创建对象的职责委托给多个帮助子类中的某一个,并且希望将哪一个帮助子类是代理者这一信息局部化的时 ...
单例模式
基础概念 单例模式:保证一个类仅有一个实例,并提供一个访问该实例的全局访问点。适用性:当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。参与者: - Singleton - ...
装饰者模式
基础概念 装饰者模式:动态地给一个对象添加一些额外的职责。适用性:在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。处理那些可撤销的职责。当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸 ...
图论算法
拓扑排序拓扑排序是对有向无圈图的顶点的一种排序,使得如果存在一条从 $v_i$ 到 $v_j$ 的路径,那么在排序中 $v_j$ 就在 $v_i$ 的之后出现。它的原理比较简单,直接用下面的图片进行展示了。图片来源与拓扑排序(Topological Sorting) 拓扑 ...
观察者模式and发布订阅模式
按照书中的理解,发布订阅模式属于观察者模式。但是现在常常将二者区分开来了,本文首先介绍观察者模式,然后在过程中介绍发布订阅模式。 基础概念 观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于 ...
散列(哈希)表
基本概念散列表是一种用于以常数平均时间执行插入、删除和查找的技术。但是,那些需要元素间任何序信息的树操作在这里将不会得到有效的支持(如findMin、findMax)。理想的散列表只不过是一个具有固定大小的数组。假定散列表长度为n,当向散列表中插入数据时,将该数据的关键字(key)作为输入传递给一个 ...