行为型模式

行为型模式

行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。

模板方法模式

定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。

  • 抽象类(Abstract Class):负责给出一个算法的轮廓和骨架。它由一个模板方法和若干个基本方法构成。

    • 模板方法:定义了算法的骨架,按某种顺序调用其包含的基本方法。
    • 基本方法:是实现算法各个步骤的方法,是模板方法的组成部分。
  • 具体子类(Concrete Class):实现抽象类中所定义的抽象方法和钩子方法,它们是一个顶级逻辑的组成步骤。


寒江蓑笠翁大约 36 分钟设计模式设计模式go
结构型模式

结构型模式

结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式, 前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。 由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型 模式具有更大的灵活性。

代理模式

由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。

  • 抽象主题(Subject)接口: 通过接口或抽象类声明真实主题和代理对象实现的业务方法。

  • 真实主题(Real Subject)类: 实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象。

  • 代理(Proxy)类 :提供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以访问,控制或扩展真实主题的功能。


寒江蓑笠翁大约 24 分钟设计模式设计模式go
创建型模式

创建型模式

创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是“将对象的创建与使用分离”。 这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。

简单工厂模式

这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

在Go中是没有构造函数的说法,一般会定义Newxxxx函数来初始化相关的结构体或接口,而通过Newxxx函数来初始化返回接口时就是简单工厂模式,一般对于Go而言,最推荐的做法就是简单工厂。


寒江蓑笠翁大约 17 分钟设计模式设计模式go
设计原则

设计原则

这六大原则是比较经典的,它们是所有设计模式的基石,也是编码的基本规范,前面讲到不要过度设计,但六大原则是一个优秀的代码应当遵守最基本的规范。

开闭原则

这是一个十分经典的原则,也是最基础的原则,就只有10个字的内容,对拓展开放,对修改关闭。一个程序应当具有相应的拓展性,假设开发了一个Go第三方依赖库,倘若调用者想要自定义功能只能去修改依赖库的源代码,但是每个人都有不同的需求,难道每个人都要改一遍源代码吗,这么做的结果显然是非常恐怖的,代码会变得异常难以维护。

单一职责原则


寒江蓑笠翁大约 5 分钟设计模式设计模式go
所谓模式

所谓模式

要说将设计模式发扬光大的语言还得是Java,虽然本质上来说,设计模式是一门语言无关的学问,但几乎所有设计模式的教学语言都是用的是Java,毫无疑问Java是使用设计模式最多的语言,因为它是一个很典型的面向对象的语言,万物皆对象,很显然设计模式就是面向对象的,这是一个优点也是一个缺点,因为有时候过度设计同样会造成难以维护的问题。设计模式起源于建筑工程行业而非计算机行业,它并不像算法一样是经过严谨缜密的逻辑推算出来的,而是经过不断的实践与测试总结出来的经验。使用设计模式是为了代码重用性更好,更容易被他人理解,以及更好维护的代码结构。


寒江蓑笠翁大约 6 分钟设计模式设计模式go