十六、状态模式(State)
定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
应用场景:状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂的情况时,把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。
1、面向对象设计其实就是希望做到代码的责任分解
十七、适配器模式(Adapter)
定义:将一个类的接口转换成客户希望的另外一个接口,adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
1、系统的数据和行为都正确,但是接口不符时,我们应该考虑用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用的一些现存的类,但是接口又与复用环境要求不一致的情况。
2、使用一个已存在的类,如果它的接口,也就是它的方法和你要求不相同时,就应该考虑用适配器模式。
3、两个类所做的事情相同或相似,但是具有不同的接口时要使用它
十八、备忘录模式(Memento)
定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
1、备忘录模式其实本质就是把多个变量的保存封装到一个类中,通过类的封装来实现业务的分离,如果不用类,那么只能进行基础类型的复制,业务上不清晰,通过封装状态类,可以实现对管理备忘的隔离细节。
十九、组合模式(Composite)
定义:将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
个人感悟:可以考虑一下聚合关系,即一个类由多个类组成,如雁群类由多只大雁类聚合而成,公司类由多个子公司聚合而成,组合关系就是在某些需求下,一般是有整体局部关系时,让子公司继承公司类,这样单个类和聚合类都具有相同的接口,可以满足整体局部的关系,其实接口也是能实现这样的关系,但是接口相当于还要多加类,其实就是把接口内聚到单个类上,让其他类继承单个类,从而实现组合。
1、当你发现需求中是体现与整体层次的结构时,以及你希望用户可以忽略聚合对象与单个对象的不同,统一使用组合结构中的所有对象时,就应该考虑用组合模式
2、组合模式让客户可以一致地使用组合结构和单个对象
二十、迭代器模式(Iterator)
定义:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。
个人感悟:其实各种模式就是为了满足各种需求,迭代器就是添加了列表的接口,使列表通过迭代器能够表现迭代器的行为,而不需要关注列表本身,这在map、list等场景下很常见,所以java等高级语言已经在语言层面实现了迭代器模式。
1、当你需要访问一个聚集对象,而且不管这些对象是什么都需要遍历的生活,你就应该考虑用迭代器模式
2、迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据。