本篇涉及11种行为型设计模式,分别是职责链模式、命令模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式、访问者模式和解释器模式。
职责链模式
|
|
构造一个链表,然后依次让链表上的元素处理事物,期间一旦某元素能处理事物则不会再让后续元素处理。
命令模式
|
|
Kotlin自称把函数当第一公民,但是表达能力是没有Scala强的,不过在这里可以使用Lambda表达式替代传统面向对象编程来对命令模式进行编写。
编写中遇到了bug,详细描述见文末参考。
迭代器模式
|
|
迭代器模式旨在实现一个简单的迭代器。
中介者模式
|
|
避免对象之间直接交互,彼此实现看不见对方,中介者作为平台处理对象之间的关系。
备忘录模式
|
|
这里涉及到三个角色Memento、Originator以及CareTaker,本人将Memento理解为记忆点,将Originator理解为记忆点的创造者,而把CareTaker理解为记忆点的存储者。
观察者模式
|
|
代码的核心在于对被观察者、具体的被观察者、观察者、具体的观察者的编写。订阅的行为交给观察者,而信息的通知对于观察者来说是被动的。
状态模式
|
|
不用方法来判断状态,而是采用类。
策略模式
|
|
不用if语句切换算法,而是采用类的多态。这里和观察者模式一样采用了``。
模板方法模式
|
|
模版方法模式就是在父类中定义流程框架,在子类中实现具体处理。
访问者模式
|
|
公共接口为被访问者提供接受访问的方法(也就是以访问者为参数传入),在接受方法内,访问者调用访问方法访问被访问者。
解释器模式
小结
Why must class member function types be called with invoke?
Smart cast doesn’t work for nullable value of functional type