Git提交规范记录
Commit Message作用
提供更多的历史信息,方便快速浏览
比如,下面的命令显示上次发布后的变动,每个commit占据一行。你只看行首,就知道某次 commit 的目的
1git log <last tag> HEAD --pretty=format:%s
可以过滤某些commit(比如文档改动),便于快速查找信息
比如,下面的命令仅仅显示本次发布新增加的功能
1$ git log <last release> HEAD --grep feature
可以直接从commit生成Change log
Change Log 是发布新版本时,用来说明与上一个版本差异的文档
Commit Message 的格式每次提交,Commit message 都包括三个部分:Header,Body 和 Footer
1<type>(<scope>): <subject>// 空一行<body>// 空一行<footer>
其中,Header 是必需的,Body 和 Footer 可以省略
不管是哪一个部 ...
Javascript设计模式 - 《解释器模式(行为型)》
概念解释器模式(Interpreter Pattern)是一种行为型设计模式,它定义了一种语言的文法,并提供了一种解释器来解释该语言中的句子
解释器模式通常涉及两个核心角色:解释器(Interpreter)和上下文(Context)
解释器(Interpreter)
定义了一个抽象的解释操作接口,用于解释文法中的各种句子
解释器通常会包含多个解释方法,每个方法对应文法中的一个语法规则
上下文(Context)
包含了需要解释的文法内容
上下文对象通常会包含一些全局信息或者状态,供解释器对象使用
解释器模式的核心思想是将语言的文法抽象成一个解释器对象,并通过解释器对象来解释文法中的句子
这种模式的优点在于,可以将语言的解释和实现分离,使得解释过程更加灵活和可扩展
解释器模式适用于以下情况:
当需要解释一种语言的文法,并且希望解释过程与实现解释的对象解耦时,可以使用解释器模式
当希望将解释过程封装到一个对象中,并提供一种统一的接口来解释不同类型的句子时,解释器模式也是一个很好的选择
举个简单的例子,考虑一个简单的数学表达式解析器
解释器模式可以将数学表达式的文法抽象成一个 ...
Javascript设计模式 - 《中介者模式(行为型)》
概念中介者模式(Mediator Pattern)是一种行为型设计模式,它通过引入一个中介者对象来封装一系列对象之间的交互,从而降低对象之间的耦合度
中介者模式通常涉及三个核心角色:中介者(Mediator)、同事对象(Colleague)和具体中介者(Concrete Mediator)
中介者(Mediator)
定义了一个接口用于与各个同事对象通信,并负责协调各个同事对象之间的交互
中介者对象通常包含一个或多个方法,用于处理不同类型的交互事件
同事对象(Colleague)
各个参与交互的对象。同事对象可以向中介者发送消息,也可以接收来自中介者的消息
具体中介者(Concrete Mediator)
实现了中介者接口,负责实际的协调和控制各个同事对象之间的交互
具体中介者对象通常包含了各个同事对象的引用,并根据收到的消息来进行相应的处理
中介者模式的核心思想是将系统中各个对象之间的交互行为集中到一个中介者对象中,从而降低对象之间的耦合度
这种模式的优点在于,可以减少对象之间的直接依赖关系,提高系统的灵活性和可维护性
中介者模式适用于以下情况:
当系统中各个对象之间 ...
Javascript设计模式 - 《访问者模式(行为型)》
概念访问者模式(Visitor Pattern)是一种行为型设计模式,它允许在不改变被访问对象的类的前提下定义对其进行操作的新操作
访问者模式通常涉及两个核心角色:访问者(Visitor)和被访问元素(Element)
访问者(Visitor)
定义了对每个被访问元素的操作方法
每个操作方法都对应着被访问元素的不同类型,可以通过访问者来实现对被访问元素的不同操作
被访问元素(Element)
定义了一个接受访问者对象的方法,并将自身作为参数传递给访问者对象
被访问元素可以是单个对象或者对象的集合
访问者模式的核心思想是将对对象的操作(算法)从对象本身中提取出来,并将其封装到不同的访问者对象中,从而实现对对象操作的解耦
这种模式的优点在于,可以在不修改被访问对象的类的情况下定义新的操作,同时也使得新增操作的扩展更加灵活和可控
访问者模式适用于以下情况:
当需要对一个对象结构中的元素进行不同类型的操作,并且希望将操作与对象的数据结构解耦时,可以使用访问者模式
当希望在不修改对象类的情况下定义新的操作,并且希望新增操作的扩展更加灵活和可控时,访问者模式也是一个很好的选择
举 ...
Javascript设计模式 - 《状态模式(行为型)》
概念状态模式(State Pattern)是一种行为型设计模式,它允许对象在内部状态发生变化时改变其行为,使得对象看起来好像修改了其类
状态模式通常涉及三个核心角色:上下文(Context)、状态(State)和具体状态(Concrete State)
上下文(Context)
维护一个当前状态对象,并将状态相关的操作委托给当前状态对象处理
上下文对象通常会包含一个状态对象的引用,并提供方法来切换当前状态和执行状态相关的操作
状态(State)
定义了一个接口用于封装与上下文相关的行为
状态对象通常会包含多个方法,用于处理上下文对象的请求,并可能会改变上下文对象的状态
具体状态(Concrete State)
实现了状态接口,并负责实现具体的状态行为
具体状态对象通常会包含状态相关的业务逻辑,并根据需要改变上下文对象的状态
状态模式的核心思想是将对象的状态和行为进行分离,使得状态的改变不会影响对象的行为,从而实现对象的灵活性和可扩展性
这种模式的优点在于,可以将状态的转换和状态的行为封装到不同的状态对象中,使得状态之间的转换更加灵活和可扩展
状态模式适用于以下情况:
当 ...
Javascript设计模式 - 《备忘录模式(行为型)》
概念备忘录模式(Memento Pattern)是一种行为型设计模式,它允许在不暴露对象实现细节的情况下,捕获并存储对象的内部状态,并在需要时恢复到先前的状态
备忘录模式通过引入三个核心角色来实现这一点:发起人(Originator)、备忘录(Memento)和管理者(Caretaker)
发起人(Originator)
负责创建备忘录对象,并在需要时使用备忘录对象恢复其状态
发起人可以访问其内部状态,并在需要时将其保存到备忘录中或从备忘录中恢复状态
备忘录(Memento)
用于存储发起人对象的内部状态
备忘录对象可以是不可变的,以确保其状态不会被外部修改
管理者(Caretaker)
负责存储和管理备忘录对象
管理者通常不直接操作备忘录的内容,而是将备忘录对象传递给发起人,以便发起人可以恢复其状态
备忘录模式的核心思想是将对象的状态保存到备忘录对象中,并在需要时将状态恢复到先前的状态,从而实现对象状态的回溯
这种模式的优点在于,可以避免在对象内部暴露其状态的细节,同时也使得状态的存储和恢复变得更加灵活和可控
备忘录模式适用于以下情况:
当需要保存和恢复对象的状态,并 ...
Javascript设计模式 - 《命令模式(行为型)》
概念命令模式(Command Pattern)是一种行为型设计模式,它将请求封装成一个对象,从而允许用不同的请求对客户进行参数化,队列或记录请求日志,并支持可撤销的操作
命令模式通常涉及四个核心角色:命令(Command)、接收者(Receiver)、调用者(Invoker)和客户端(Client)
命令(Command)
定义了执行操作的接口
通常包含一个执行操作的方法,以及可能包含一些其他方法用于支持命令的撤销、重做等操作
接收者(Receiver)
实际执行命令操作的对象
接收者包含了具体的业务逻辑,负责实现命令接口定义的操作
调用者(Invoker)
负责调用命令对象来执行请求
调用者通常不直接与接收者交互,而是通过调用命令对象的方法来执行具体的操作
客户端(Client)
创建命令对象,并将命令对象传递给调用者来执行请求
客户端通常不需要知道命令对象的具体实现,只需要知道如何创建命令对象,并将其传递给调用者即可
命令模式的核心思想是将请求封装成一个对象,使得请求的发送者和接收者之间解耦,从而可以灵活地添加、修改和重用命令对象,同时也提供了一种统一的方式来处理请 ...
Javascript设计模式 - 《职责链模式(行为型)》
概念职责链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它允许多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系
职责链模式通常涉及两个核心角色:处理者(Handler)和客户端(Client)
处理者(Handler)
定义了一个处理请求的接口,并维护了一个后继处理者的引用
处理者可以决定是否处理请求,或者将请求传递给后继处理者
客户端(Client)
创建处理者对象,并将请求发送给处理者链的第一个处理者
客户端通常不需要知道处理者链的具体结构,只需要将请求发送给第一个处理者即可
职责链模式的核心思想是将请求发送者和接收者解耦,使得多个对象都有机会处理请求,并且可以灵活地调整处理者链的结构
这种模式的优点在于,可以降低请求发送者和接收者之间的耦合度,提高系统的灵活性和可扩展性
职责链模式适用于以下情况:
当有多个对象可以处理同一个请求,并且希望将请求发送者和接收者解耦时,可以使用职责链模式
当希望动态地调整处理者链的结构,并且希望在运行时决定请求的处理者时,职责链模式也是一个很好的选择
举个简单的例子, ...
Javascript设计模式 - 《模版方法模式(行为型)》
概念模板方法模式(Template Method Pattern)是一种行为型设计模式,它定义了一个算法的骨架,并允许子类为一个或多个步骤提供实现
模板方法模式通常涉及两个核心角色:模板类(Abstract Class)和具体实现类(Concrete Class)
模板类(Abstract Class)
定义了一个算法的骨架,其中包含了算法的各个步骤,其中某些步骤可能由子类实现
具体实现类(Concrete Class)
实现了模板类中定义的具体步骤。具体实现类负责实现模板类中定义的抽象方法,从而提供算法的具体实现
模板方法模式的核心思想是将算法的不变部分封装到模板类中,而将可变部分留给子类来实现
这种模式的优点在于,可以避免代码的重复,提高代码的复用性,并且可以在不修改模板类的情况下改变算法的某些部分
模板方法模式适用于以下情况:
当希望定义一个算法的骨架,并允许子类为其中的某些步骤提供具体实现时,可以使用模板方法模式
当希望在不修改模板类的情况下改变算法的某些部分时,模板方法模式也是一个很好的选择
举个简单的例子,考虑一个制作咖啡和茶的过程
制作咖啡和茶的过程中都 ...
Javascript设计模式 - 《策略模式(行为型)》
概念策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列算法,并将每个算法封装成单独的对象,使它们可以相互替换。策略模式允许算法的变化独立于使用算法的客户端
策略模式通常涉及三个核心角色:上下文(Context)、策略接口(Strategy Interface)和具体策略类(Concrete Strategies)
上下文(Context)
负责维护对策略对象的引用,并在需要时调用策略对象的算法
上下文通常会将请求委派给策略对象来执行特定的算法。
策略接口(Strategy Interface)
定义了所有具体策略类必须实现的算法接口
这个接口通常只有一个方法,用于执行具体的算法。
具体策略类(Concrete Strategies)
实现了策略接口,包含了具体的算法实现
每个具体策略类代表了一个具体的算法,可以根据需求增加或修改
策略模式的核心思想是将算法封装成独立的对象,并使这些对象可以相互替换,从而使得算法的变化不会影响到使用算法的客户端
这种模式的优点在于,提高了代码的灵活性和可维护性,使得算法可以在不修改客户端代码的情况下进行替换或者 ...
Javascript设计模式 - 《迭代器模式(行为型)》
概念迭代器模式(Iterator Pattern)是一种行为型设计模式,它提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示
迭代器模式通常涉及两个核心角色:迭代器(Iterator)和可迭代对象(Iterable)
迭代器(Iterator)
负责定义访问和遍历聚合对象元素的接口
迭代器对象通常会追踪当前位置,并提供方法来获取下一个元素、检查是否还有下一个元素等
可迭代对象(Iterable)
表示包含一组元素的聚合对象,并提供一个方法来获取对应的迭代器
可迭代对象可以是集合类、数组、列表等
迭代器模式的核心思想是将遍历聚合对象的行为抽象出来,并将其封装到迭代器对象中,从而实现聚合对象与遍历算法的解耦
这种模式的优点在于,可以统一遍历接口,使得客户端代码与聚合对象的内部结构解耦,同时也提供了一种通用的遍历方法,适用于各种不同类型的聚合对象
迭代器模式适用于以下情况:
当需要对聚合对象进行遍历,并且希望遍历算法与聚合对象的内部结构解耦时,可以使用迭代器模式
当希望提供一种统一的遍历接口,使得客户端代码可以统一处理不同类型的聚合对象时,迭代器模式也是一 ...
Javascript设计模式 - 《观察者模式(行为型)》
概念观察者模式(Observer Pattern)是一种行为型设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听并收到目标对象的状态变化
观察者模式通常涉及两个核心角色:目标(Subject)和观察者(Observer)
目标(Subject)
也称为主题或者可观察对象,它是被观察的对象
目标对象会维护一个观察者列表,并提供方法来添加、移除和通知观察者
观察者(Observer)
也称为订阅者或者监听者,它是接收目标对象状态变化通知的对象
观察者对象通常会实现一个更新方法,用于接收目标对象状态变化的通知
观察者模式的核心思想是通过定义目标对象和观察者对象之间的一对多依赖关系,使得目标对象状态变化时能够通知所有的观察者对象
这种模式的优点在于,实现了目标对象和观察者对象的解耦,使得它们可以独立变化,同时也提供了一种灵活的机制来实现发布-订阅模式
观察者模式适用于以下情况:
当一个对象的状态变化需要通知其他对象,并且这些对象的数量和类型在运行时可以动态变化时,可以使用观察者模式
当一个对象的状态变化可能引起其他对象的状态变化,并且希望避免对象之间的紧耦合关系时, ...