设计模式(三)行为型

1、职责链模式(Chain-of-responsibility)

当你有一个命令,以及多个处理对象,却不知道用哪个对象处理时,用职责链,一直传递直到传到那个类。
当你的if-else或switch很臃肿的时候,可以使用职责链模式。

有2个角色:

  • command objects
    一个命令
  • processing objects
    一个处理对象,包含了另一个processing object。当不满足命令的条件时,传递命令给另一个。

注:需要把switch中的default和finally也考虑进去。

2、命令模式(Command)

将行为和参数封装到一个类里。

例子:

  • 大名鼎鼎的Intent用到了一部分命令模式,其实可以再封装的
  • 网络请求,如果是短连接,则都是命令模式

有3个角色:

  • Invoker
    负责唤起Command的类,对于Intent来说,就是Context
  • Command
    一个命令,包含行为以及可选的参数
  • 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个角色

  • MediatorConcreteMediator
    包含多个Colleague实例
  • ColleagueConcreteColleague
    包含一个Mediator实例,用来跟其他Colleague交互

注:Mediator和Colleague之间,你中有我,我中有你,只有Colleague之间交互复杂到一定程度,才会用到吧。

6、备忘录模式(Memento)

可以记录一个对象的之前的状态,并且可以恢复。

例子:savedInstanceState

有2个角色:

  • Originator
    有内部类Memento,用来备份、恢复
  • Memento
    负责记录旧的数据

7、观察者模式(Observer)

允许Observer监听一个事件。

例子:满地都是

有2个角色:

  • Subject
    被事件触发时调用Observer
  • Observer
    在Subject中注册Observer

8、状态模式(State)

允许一个对象,当他的状态转变时,他的行为也变了。当参数不符合当前状态时,会转变状态。

有2个角色:

  • Context
    存储当前状态
  • StateContreteState
    存储状态名,以及对应的行为

9、策略模式(Strategy)

定义一系列的算法,将他们封装,使他们在运行时可以自由切换。除了不会自动变状态外,与状态模式相同。

有2个角色:

  • Context
  • StrategyContreteStrategy

注:状态模式只能自动变,策略模式只能手动变。

10、模板方法模式(Template method)

在一个抽象类中定义算法的骨架,在子类中实现他。

有2个角色:

  • AbstractClass
    包含public final的模板方法,以及一些抽象发放,模板方法不可被重写。
  • ConcreteClass
    实现父类的抽象方法

注:不像之前的那些设计模式,是让代码更灵活,模板方法模式让代码更符合约束。

11、访问者模式(Visitor)

将算法的一部分从类中剥离,而又不影响层次结构。

有2类角色:

  • Component
    有accept方法,可以接受Visitor
  • VisitorConcreteVisitor
    包含了算法,在accept中被调用。只要更换Visitor,行为就会改变。
分享到 评论