• 章节目录
  • 模板方法模式
    • 模板方法定义
    • 示例代码
    • OO原则(好莱坞原则):别打给我,我会找你
  • 迭代器模式
    • 迭代器模式的定义
    • OO设计原则:单一责任
  • 组合模式
    • 组合模式和工厂模式
  • 提供服务 vs 接口标准化
    • 交给子类 OR 使用组合:策略,状态、模板和工厂
    • 统一接口 OR 简化接口:命令、适配、外观、装饰、迭代器和组合
模板方法模式和迭代器、组合模式 - 内容简介

本章首先介绍了模板方法模式。模板方法通过在抽像层定义一组算法和服务流程,然后把这些步骤的实现推迟到子类进行,由子类选择实现或者重写抽象类的方法以提供自定义的服务。通过使用不同的关键字: final,protected,private,abstract,有效的指明了抽象类和子类的职责。此外,模板方法的算法可以有不同的分支,子类通过钩子进行控制。模板方法和工厂方法类似,都是交给子类,而策略模式则是使用组合,不过这三者都属于提供服务的目的(区别于上一张的适配器、装饰器、命令模式实现接口标准化的目的)。

在第二部分,着重介绍了迭代器模式和组合模式,迭代器模式的中心思想是:为每个类分配单一的责任以简化接口调用。迭代器模式强调通过分离责任简化对于获取容器元素的接口的调用。

组合模式一般用来保存一组相同的类实例对象,不同于策略模式,组合模式保存对象后自己实现了其保存对象的类的接口,也就是说,组合模式通过实现其保存类的接口,导致其内部容器实例可以保存类和类的组合(主类对象本身)这样一种奇妙的现象。组合模式违反了OOP每个类只有一种变化原因的原则,牺牲了透明性,统一了接口。调用主类的方法通常使用容器迭代器逐个返回其保存子类的方法,如果碰到子类是组合的情况,则递归调用迭代器返回其内部方法。迭代器和组合模式均属于提供标准接口这一大类的设计模式(组合+接口)。和其比较相似的有:装饰器模式、适配器模式、外观模式、命令模式、代理模式。

最后更新于 2018-09-08 查看笔记

面向接口编程 - 隐藏实现细节

我始终难以真正理解面向接口编程的要义。面向接口指的是自上而下的建构工作,当流程确定之后,实现这些流程对应的接口,但是不提供实现。至于实现的细节,则交给实现类(可以使用依赖注入或者工厂方法)完成。这样完成了流程和实现的解耦,一个好的系统,应该只通过抽象类和接口就能看懂其工作原理,只使用抽象类和接口代码就可以完成全部的工作(完美隐藏实现)。

2018-11-30
模板方法和面向接口编程

模板方法本质上就是抽象的定义和抽象方法之间的互相调用,专注抽象而不管具体实现,广义上来讲这里不仅仅是抽象类,而泛指一切接口类的定义,接口方法之间的互相调用。因为 Java 8 之前接口不允许实现方法,因此这一点难以体会。但是对于 Scala 而言,Scala 的特质非常容易实现模板方法,构造富接口,其只用混入一个实现了被调用的模板方法的特质/类,所有调用这个模板方法的富接口的方法均会被动态实现。

2018-11-30
模板方法并非 Interface

模板方法和 Interface 很类似,但是其目的大相径庭。模板方法强调方法的抽象,以及在一个方法中调用这些抽象的多态,而实现自己的多态。这和 Scala 的特质混入类似,但是和 Java 的面向接口差别很大。面向接口强调解耦,抽象的消息传递以及其实现的解耦。而模板方法在 Java 中更侧重于统筹抽象方法的那个方法的通过继承的代码复用。

2018-12-04