摘要:
策略模式 定义:定义了一系列算法,并将每一个算法封装起来,而且他们之间还可以相互替换。 注意解决多种算法相似的i情况下,使用if/else带来的复杂和难以维护。 使用场景:1. 一个对象有很多行为,这些行为使用了多重条件选择语句实现。2.一个系统需要动态的在几种算法中选择一种。 可以使用策略模式+工 阅读全文
摘要:
状态模式 定义:当一个对象得内在状态改变时,他的行为也会改变。对有状态的对象,把复杂的"判断逻辑"提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。 使用场景:代码中包含大量与对象状态有关的条件语句。 注意事项:在行为受状态约束的时候使用,且状态不超过5个。 模式的结构: 环境类 阅读全文
摘要:
观察者模式 定义:观察者模式(发布-订阅模式),指多个对象之间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都得到通知并被自动更新。 使用场景: 一个对象的改变会导致其他一个或多个对象的改变 一个对象必须通知其他对象 结构: 抽象主题(Subject):抽象目标类,它提供了一个用 阅读全文
摘要:
备忘录模式 定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 使用场景:需要保存、恢复数据的相关场景。提供可回滚的操作。如游戏中的存档、应用软件里的Ctrl+Z等。 注意事项:为了符合迪米特法则,还需增加一个管理备忘录的类。为了节约内存还可使用原型模式+备忘录模式。 阅读全文
摘要:
中介者模式 定义:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式的相互引用,从而使耦合松散,而且可以独立的改变他们之间的交互。 使用场景:多个类相互耦合,形成了网状结构。比如想租房,不用和每个房东联系,而是跟一个中介联系就行。 缺点:中介者模式把多个对象之间的相互依赖改成了中介和多个 阅读全文
摘要:
迭代器模式 定义:提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该对象的内部表示。 如果我们需要遍历一个聚合对象中的各个元素,通常的做法是把遍历方法写在对象这个类里,这样做如果要更改遍历方法需要修改这个对象类,违背了“开闭原则”。迭代器模式能较好的克服这个缺点。 使用场景:需要遍历一个聚 阅读全文
摘要:
命令行模式 定义:将一个请求封装为一个对象,使发出的请求的对象和执行请求的对象分割开。这两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。 顺序:请求者->命令->执行者 优点: 降低系统耦合度 扩展性好,增加或删除命令不会影响其他类 方便实现Undo和Redo操作, 阅读全文
摘要:
责任链模式 也叫职责链模式 定义:为了避免请求发送者和多个请求处理者之间的耦合,于是将所有请求的处理者通过前一对象记住其后一对象的引用。当有请求来时,可将请求沿着链传递,直到有处理者处理它为止。 优点: 降低了对象之间的耦合度,该模式使得一个对象无须知道到底是哪一个对象处理其请求。 责任链简化了对象 阅读全文
摘要:
代理模式 定义:由于某些原因需要给某对象提供一个代理以控制该对象的访问 结构: 抽象主题(Subject): 接口声明要实现的业务方法 真实主题 (Real Subject): 实现抽象主题里的业务方法 代理类(Proxy):提供了与真实主题相同的接口,它可以扩展、控制真实主题的功能。 代理模式的结 阅读全文
摘要:
享元模式 定义:使用共享物件,来减少内存使用量。通常物件中的部分状态时可以分享的,常见的做法时将他们放在外部数据结构中,当需要使用时再将它们传递给享元。能够避免重复创建。 应用实例:Java里的String字符串缓存池。数据库的数据池 使用场景:系统里有大量相似对象,需要用到缓存的场景 需要注意线程 阅读全文