From 825cec468d771ba5950c02dae6784c1febfa0477 Mon Sep 17 00:00:00 2001 From: Hans Date: Thu, 14 Oct 2021 22:12:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=80=E5=A4=84=E6=8F=92?= =?UTF-8?q?=E5=9B=BE=E4=BD=8D=E7=BD=AE=E9=94=99=E8=AF=AF=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/ch7.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/ch7.md b/docs/ch7.md index a174826..3185cf9 100644 --- a/docs/ch7.md +++ b/docs/ch7.md @@ -46,13 +46,14 @@ public class TextDocument ... { 在上面的示例中,职责交织的三个类为:TextDocument,TextArea 和 TextDocumentListener。学生通过在类之间移动方法并将三个类缩减为两个类来消除直通方法,这两个类的职责更加明确。 +![UtQHQx.png](https://s1.ax1x.com/2020/07/13/UtQHQx.png) +图 7.1:直通方法。在(a)中,类 C1 包含三个直通方法,这些方法只调用 C2 中具有相同签名的方法(每个符号代表一个特定的方法签名)。可以通过使 C1 的调用方像在(b)中那样直接调用 C2,通过在 C1 和 C2 之间重新分配功能以避免在(c)中的类之间进行调用,或者通过组合在(d)中的类来消除直通方法。 。 + #### 7.2 接口复制何时可以 具有相同签名的方法并不总是不好的。重要的是,每种新方法都应贡献重要的功能。直通方法很糟糕,因为它们不提供任何新功能。 分派器是一个示例,该示例对于一种方法调用具有相同签名的另一种方法很有用。调度程序是一种使用其参数选择要调用的其他方法之一的方法。然后将其大部分或所有参数传递给所选方法。调度程序的签名通常与其调用的方法的签名相同。即便如此,调度程序仍提供有用的功能:它可以选择其他几种方法中的哪一种来执行每个任务。 -![UtQHQx.png](https://s1.ax1x.com/2020/07/13/UtQHQx.png) -图 7.1:直通方法。在(a)中,类 C1 包含三个直通方法,这些方法只调用 C2 中具有相同签名的方法(每个符号代表一个特定的方法签名)。可以通过使 C1 的调用方像在(b)中那样直接调用 C2,通过在 C1 和 C2 之间重新分配功能以避免在(c)中的类之间进行调用,或者通过组合在(d)中的类来消除直通方法。 。 例如,当 Web 服务器从 Web 浏览器接收到传入的 HTTP 请求时,它将调用一个调度程序,该调度程序检查传入请求中的 URL 并选择一种特定的方法来处理该请求。某些 URL 可以通过返回磁盘上文件的内容来处理。其他人则可以通过调用诸如 PHP 或 JavaScript 之类的语言的过程来处理。分发过程可能非常复杂,通常由与传入 URL 匹配的一组规则来驱动。 @@ -101,4 +102,4 @@ public class TextDocument ... { #### 7.6 结论 接口,参数,函数,类或定义之类的添加到系统中的每个设计基础架构都会增加复杂性,因为开发人员必须了解该元素。为了使元素能够提供相对于复杂性的净收益,它必须消除在没有设计元素的情况下会出现的一些复杂性。否则,最好不要使用该特定元素来实施系统。例如,一个类可以通过封装功能来降低复杂性,以使该类的用户无需意识到这一点。 -“不同的层,不同的抽象”规则只是此思想的一种应用:如果不同的层具有相同的抽象,例如直通方法或装饰器,则很有可能它们没有提供足够的利益来补偿它们代表的其他基础结构。类似地,传递参数要求几种方法中的每一种都知道它们的存在(这增加了复杂性),而又不提供其他功能。 \ No newline at end of file +“不同的层,不同的抽象”规则只是此思想的一种应用:如果不同的层具有相同的抽象,例如直通方法或装饰器,则很有可能它们没有提供足够的利益来补偿它们代表的其他基础结构。类似地,传递参数要求几种方法中的每一种都知道它们的存在(这增加了复杂性),而又不提供其他功能。