状态模式
定义
当一个对象的内在状态改变时,允许改变起行为,这个对象看起来像是换了一个类。
我的理解
定义多个状态,通过状态转移逻辑来取代条件分支语句
例子
工作有不同的状态,如果不使用状态模式,那么需要使用很多的条件分支语句;如果使用状态模式,那么可以定义多个不同的工作状态类,在每个状态中,通过时间的判断(简单的分支),来实现状态转移
应用场景
当一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为时,就可以考虑使用状态模式了
适配器模式
定义
将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原来由于接口不兼容而不能一起工作的那些类可以一起工作。
我的理解
设计满足客户需求的接口,以解决原接口和客户之间不匹配的关系
例子
姚明是客户,原接口是说英文的教练,现在加一个翻译(适配器,也就是满足客户需求的接口),使得姚明听得懂教练的话。
应用场景
适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况
备忘录模式
定义
在不破坏封装性的前提下,捕获一个独享的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
我的理解
管理者(Memento)维护和记录一些属性,当发起者(Originator)需要时可以恢复
例子
游戏中去打boss之前,游戏会备份你的属性,然后打boss死了后回到备份的属性
应用场景
游戏……当角色的状态改变时,有可能这个状态是无效的,这时候就可以使用暂时存储的备忘录将状态复原
组合模式
定义
将对象组合成树型结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
我的理解
本质就是树型结构,将对象抽象成父亲节点和叶子结点两类
例子
子公司和分公司,子公司是叶子结点,分公司是父亲节点,总公司是根节点
应用场景
当你发现需求中体现部分与整体层次的结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,就应该考虑用组合模式了。
透明模式与安全模式
透明模式:对叶结点和分支结点提供完全一致的接口,缺点是部分方法无意义
安全模式:对叶结点和分支结点提供不同的接口,缺点是客户端的调用需要做相应的判断,带来不便
迭代器模式
定义
提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部标识
我的理解
相当于是写一个类的Iterator
例子
各种语言都有不同的迭代器,都是例子
应用场景
需要遍历时考虑,需要不同的方式遍历时考虑