1、职责链模式(Chain-of-responsibility)
当你有一个命令,以及多个处理对象,却不知道用哪个对象处理时,用职责链,一直传递直到传到那个类。
当你的if-else或switch很臃肿的时候,可以使用职责链模式。
有2个角色:
command objects
一个命令processing objects
一个处理对象,包含了另一个processing object。当不满足命令的条件时,传递命令给另一个。
注:需要把switch中的default和finally也考虑进去。
2、命令模式(Command)
将行为和参数封装到一个类里。
例子:
- 大名鼎鼎的Intent用到了一部分命令模式,其实可以再封装的
- 网络请求,如果是短连接,则都是命令模式
有3个角色:
Invoker
负责唤起Command的类,对于Intent来说,就是ContextCommand
一个命令,包含行为以及可选的参数ConcreteCommand
Command类的子类
3、解释器模式(Interpreter)
定义一种语言的语法,然后用解释器解释他。
解释器模式中使用了组合模式,
有3个角色:
Expression
所有Expression都有方法interprete。TerminalExpression
继承Expression。负责存储Expression中的信息。也许是行为,也许是数据。NonterminalExpression
继承Expression,同时也是Expression的组合。负责解释Expression
注:你真的会有需要解释语言的时候吗。
4、迭代器模式(Iterator)
按顺序访问一个数据结构,却没有暴露数据结构。
例子:
- Java自带的Iterator
- SQLiter的Cursor
注:我需要讲什么吗,Java都自带了
5、中介者模式(Mediator)
降低一组类的耦合,用中介者管理他们之间的交互。
有4个角色
Mediator和ConcreteMediator
包含多个Colleague实例Colleague和ConcreteColleague
包含一个Mediator实例,用来跟其他Colleague交互
注:Mediator和Colleague之间,你中有我,我中有你,只有Colleague之间交互复杂到一定程度,才会用到吧。
6、备忘录模式(Memento)
可以记录一个对象的之前的状态,并且可以恢复。
例子:savedInstanceState
有2个角色:
Originator
有内部类Memento,用来备份、恢复Memento
负责记录旧的数据
7、观察者模式(Observer)
允许Observer监听一个事件。
例子:满地都是
有2个角色:
Subject
被事件触发时调用ObserverObserver
在Subject中注册Observer
8、状态模式(State)
允许一个对象,当他的状态转变时,他的行为也变了。当参数不符合当前状态时,会转变状态。
有2个角色:
Context
存储当前状态State和ContreteState
存储状态名,以及对应的行为
9、策略模式(Strategy)
定义一系列的算法,将他们封装,使他们在运行时可以自由切换。除了不会自动变状态外,与状态模式相同。
有2个角色:
ContextStrategy和ContreteStrategy
注:状态模式只能自动变,策略模式只能手动变。
10、模板方法模式(Template method)
在一个抽象类中定义算法的骨架,在子类中实现他。
有2个角色:
AbstractClass
包含public final的模板方法,以及一些抽象发放,模板方法不可被重写。ConcreteClass
实现父类的抽象方法
注:不像之前的那些设计模式,是让代码更灵活,模板方法模式让代码更符合约束。
11、访问者模式(Visitor)
将算法的一部分从类中剥离,而又不影响层次结构。
有2类角色:
Component
有accept方法,可以接受VisitorVisitor和ConcreteVisitor
包含了算法,在accept中被调用。只要更换Visitor,行为就会改变。