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

浙公网安备 33010602011771号