摘要: 简单回顾一下设计模式的知识点
开个坑,对设计模式的简单理解和使用 下面的大纲就是后续分享的内容 部分知识来自网络 完成一块的总结就补充链接到对应的标题。 设计模式 * 个人的观点:要学会避免为了设计而设计,避免过度设计。在充分理解逻辑后,合理利用设计模式重构代码,让代码便于维护。推荐阅读《大话重构》、《深入浅出设计模式》等书籍 * * 每个原则或模式前的说明,也许比较绕口,不好理解。不过但你掌握之后,在看这句话,你就会豁然开朗。 * 7 大原则 单一职责 一个类或模块应该只负责一项功能或职责。 [知识链接](https://hi.h...
备忘录模式 模式功能说明:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式。 模式思路与原理 备忘录模式涉及三种角色: 发起人(Originator):负责创建一个备忘录,用以记录当前内部状态,通过也可以使用备忘录恢复内部状态。 备忘录(Memento):负责存储发起人的内部状态,并可以防止发起人以外的其他对象访问备忘录。 管理者(Caretaker):负责保存备忘录,不能对备忘录的内容进行操作或检查。 案例 class Memento { ...
中介者模式 模式功能说明:中介者模式使得对象之间的交互方式不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。 模式思路与原理 中介者模式的主要角色有: 抽象中介者(Mediator):定义了同事对象到中介者对象的接口。 具体中介者(ConcreteMediator):实现了抽象中介者的方法,它需要知道所有具体同事类,并从具体同事接收消息,向具体同事对象发出命令。 抽象同事类(Colleague):定义了中介者对象的接口,它只知道中介者而不知道其他的同事对象。 具体同事类:每个具体同事类...
迭代器模式 模式功能说明:不同种类的对象可能需要不同的遍历方式,我们对每一种类型的对象配一个迭代器。 案例 //定义迭代器接口 interface Iterator { boolean hasNext(); Object next(); } //定义容器接口 interface Container { Iterator getIterator(); } //实现容器接口的具体类 class NameRepository implements Container { public String names[] = {"Rob...
解释器模式 模式功能说明:为语言创建解释器,通常由语言的语法和语法分析来定义。 模式思路与原理 当有一个语言需要解释执行,并且你可将该语言中的句子表示为一个抽象语法树的时候,可以使用解释器模式。而当存在以下情况时该模式效果最好:文法简单对效率要求不高、环境类中包含解释之外的操作。 案例 public interface Expression { int interpret(Context context); } public class AddExpression implements Expression { @Override ...
状态模式 模式功能说明:它允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。 模式思路与原理 状态模式的主要角色:抽象状态角色(State) 、具体状态角色(ConcreteState)、环境角色(Context)。 案例 interface State { void handle(Context context); } class ConcreteStateA implements State { public void handle(Context context) { System.out.pr...
访问者模式 模式功能说明:允许我们添加新的操作到现有的类结构中,而不需要修改它。 模式思路与原理 抽象访问者(Visitor)角色:定义一个访问具体元素的接口,为每个具体元素类对应一个访问操作 visit() ,该操作中的参数类型标识了被访问的具体元素。 具体访问者(ConcreteVisitor)角色:实现抽象访问者角色中声明的各个访问操作,确定访问者访问一个元素时该做什么。 抽象元素(Element)角色:声明一个包含接受操作 accept() 的接口,被接受的访问者对象作为 accept() 方法的参数。 具体元素(ConcreteElement...
观察者模式 模式功能说明:让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。 模式思路与原理 观察者模式的主要角色有两种:观察者(Observer)和被观察者(Subject)。被观察者持有观察者的集合,当被观察者的状态发生变化时,会通知所有的观察者。 案例 import java.util.ArrayList; import java.util.List; // 被观察者 class Subject { private List observers = ...
命令模式 模式功能说明:在命令模式中,请求在对象中作为命令来封装,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把命令传给相应的对象,该对象执行命令。 模式思路与原理 抽象命令类(Command):声明执行操作的接口。 具体命令类(ConcreteCommand):是抽象命令类的实现者,它定义了动作和接收者之间的绑定关系。 调用者(Invoker):负责调用命令。 接收者(Receiver):接收命令并执行命令。 案例 // 抽象命令类 public interface Command { void exe...
模板模式 模式功能说明:它定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。 模式思路与原理 模板模式通俗的描述是完成一件事情,有固定的数个步骤,但是每个步骤根据对象的不同,而实现细节不同;就可以在父类中定义一个完成该事情的总方法,按照完成事件需要的步骤去调用其每个步骤的实现方法。每个步骤的具体实现,由子类完成。 案例 abstract class WebsiteTemplate { public void buildWebsite() { createHeader(); createContent();...