摘要:
概述 如果在一个系统中对象之间的联系呈现为网状结构,如下图所示。对象之间存在大量的多对多联系,将导致系统非常复杂,这些对象既会影响别的对象,也会被别的对象所影响,这些对象称为同事对象,它们之间通过彼此的相互作用实现系统的行为。在网状结构中,几乎每个对象都需要与其他对象发生相互作用,而这种相互作用表现 阅读全文
摘要:
概述 在软件开发时,经常需要使用聚合对象来存储一系列数据。聚合对象拥有两个职责:一是存储数据;二是遍历数据。从依赖性来看,前者是聚合对象的基本职责;而后者既是可变化的,又是可分离的。因此,可以将遍历数据的行为从聚合对象中分离出来,封装在一个被称之为 "迭代器" 的对象中,由迭代器来提供遍历聚合对象内 阅读全文
摘要:
文法规则和抽象语法树 解释器模式描述了如何为简单的语言定义一个文法,如何在该语言中表示一个句子,以及如何解释这些句子。在正式分析解释器模式结构之前,先来学习如何表示一个语言的文法规则以及如何构造一棵抽象语法树。 例如对于表达式 “1+2+3-4+1”,其中包含了3个语言单位,可以使用如下文法规则来定 阅读全文
摘要:
概述 在软件开发中,经常需要向某些对象发送请求(调用其中的某个或某些方法),但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,此时,特别希望能够以一种松耦合的方式来设计软件,使得请求发送者与请求接收者能够消除彼此之间的耦合,让对象之间的调用关系更加灵活,可以灵活地指定请求接收者以及被请求的操 阅读全文
摘要:
索引原理 这里主要讨论一下 MySQL InnoDB 存储引擎,基于B-树(但实际上MySQL采用的是B+树结构)的索引结构。 一次索引的过程大致如下图所示: 首先来看一下磁盘的结构,其示意图如下所示: 读/写磁盘某一位置的步骤如下: 首先根据柱面号,移动读写磁头,使磁头移动到相应的柱面上,这一过程 阅读全文
摘要:
概述 很多情况下,在一个软件系统中可以处理某个请求的对象不止一个,例如SCM系统中的采购单审批,主任、副董事长、董事长和董事会都可以处理采购单,他们可以构成一条处理采购单的链式结构,采购单沿着这条链进行传递,这条链就称为职责链。 职责链可以是一条直线、一个环或者一个树形结构,最常见的职责链是直线型, 阅读全文
摘要:
算法简介 在一个数组中,存在一个众数,众数的数量要大于数组大小的一半。设计时间复杂度为 O(n),空间复杂度为 O(n) 的算法: 在数组中找出该众数。 该算法维护了两个变量:候选人 candiate 和投票数目 count。其基本算法步骤如下: 初始化 candiate 为任意值,count 的值 阅读全文
摘要:
概述 代理模式是一种应用很广泛的结构型设计模式,而且变化很多。在代理模式中引入了一个新的代理对象,代理对象可以在客户端对象和目标对象之间起到中介的作用,去掉客户不能看到的内容和服务或者增添客户需要的额外服务。 代理模式定义如下:给某一个对象提供一个代理,并由代理对象控制对原对象的引用。代理模式是一种 阅读全文
摘要:
概述 当一个软件系统在运行时产生的对象数量太多,将导致运行代价过高,带来系统性能下降等问题。例如,在一个文本字符串中存在很多重复的字符,如果每一个字符都用一个单独的对象来表示,将会占用较多的内存空间。那么,如何去避免系统中出现大量相同或相似的对象,同时又不影响客户端程序通过面向对象的方式对这些对象进 阅读全文
摘要:
概述 根据单一职责原则,在软件中将一个系统划分为若干个子系统(Subsystem)有利于降低整个系统的复杂性,一个常见的设计目标是使客户类与子系统之间的通信和相互依赖关系达到最小,而达到该目标的途径之一就是引人一个外观(Facade)角色,它为子系统的访问提供了一个简单而单一的人口。外观模式也是迪米 阅读全文