Go设计模式
用Go把设计模式实现一遍。构建一个知识库。
虽然网上有《Go Patterns》,不过是英文版的,并且不全,我就想把它翻译成中文的,并且补全。
_寒江雪_
这个作者很懒,什么都没留下…
展开
-
【寒江雪】Go实现模版方法模式
Template Pattern 模版方法设计模式允许把对象不同的部分抽象,在同一段代码中执行相同的逻辑,增加可拓展性。在Go语言中,实现由底层对象实现,而行为由顶层方法控制。实现package templateimport "fmt"type Tmpl interface{ DoSomething() DoAnything()}type Tmp...原创 2018-03-23 00:18:42 · 1350 阅读 · 2 评论 -
【寒江雪】Go实现观察者模式
Observer Pattern 观察者模式使得一种类型的实例可以发送事件给其他类型,前提是接收事件的实例要根发送者订阅这个事件。实现 先来定义要使用到的接口package observertype( Event struct{ Data int64 } Observer interface{ OnNotif...原创 2018-03-17 12:45:15 · 1444 阅读 · 2 评论 -
【寒江雪】Go实现策略模式
Strategy Pattern 策略模式在运行时动态地装配算法行为到对象中。 我们可以定义算法,封装它们,动态地切换它们。实现type Operator interface{ Apply(int,int)int}type Operation struct{ Operator Operator}func (this *Operation)Op...原创 2018-03-20 15:40:36 · 983 阅读 · 0 评论 -
【寒江雪】Go实现备忘录
Memento Pattern 备忘录模式保存一个对象的状态,在需要的时候将其恢复。 该模式在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。 很多时候我们总是需要记录一个对象的内部状态,这样做的目的就是为了允许用户取消不确定或者错误的操作,能够恢复到他原先的状态,使得他有”后悔药”可吃。实现 我们以...原创 2018-03-17 00:55:53 · 617 阅读 · 0 评论 -
【寒江雪】Go实现状态模式
State Pattern 状态模式把对象每一个状态的行为封装在对象内部。避免大量状态逻辑杂糅。实现package stateimport "fmt"type State interface{ NextState()State Update()}type GameStartState struct{}type GameRunState s...原创 2018-03-19 13:25:09 · 844 阅读 · 0 评论 -
【寒江雪】Go实现工厂模式
简单工厂 简单工厂的实现思想,即创建一个工厂,将产品的实现逻辑集中在这个工厂中。/*** * Simple Factory */type FoodFactory struct {}func (ff FoodFactory) CreateFood(name string) Food { var s Food; switch name { case ...原创 2018-03-08 16:25:15 · 1278 阅读 · 0 评论 -
【寒江雪】Go实现Builder Pattern
Builder Pattern 生成器模式将复杂对象的构造与表示分开,以便相同的构建过程可以创建不同的表示形式。 然而在Go语言中,如果向Builder传递一个结构,代码中就会充满检查代码,判断某个字段是否为空。为了避免这种现象,我们只需要在Builder中放置一个配置结构。实现 我们来实现一个构造器构造一个灯的过程。// 先定义几个类型type Color s...原创 2018-03-10 01:15:52 · 678 阅读 · 0 评论 -
【寒江雪】Go实现对象池模式
Object Pool Pattern 对象池模式是一种创建型模式,根据需求来预测将要使用的对象,提前创建并保存在内存中。实现对象池定义package poolimport ( "fmt" "strconv")type Object struct{}func (Object)Do(index int){ fmt.Println...原创 2018-03-10 16:08:20 · 956 阅读 · 0 评论 -
【寒江雪】Go实现单例模式
Singleton Pattern 单例模式限制了一个类型只有一个对象。实现单例定义package singletontype singleton map[string]stringvar ( once sync.Once instance singleton)func New() singleton { once.Do(fun...原创 2018-03-10 19:07:44 · 859 阅读 · 0 评论 -
【寒江雪】Go实现桥接模式
Bridge Pattern Bridge Pattern说的是,当一个系统中,包含一个组件,该组件是可变的,该系统是可变的。这个时候就需要一个桥连接抽象的系统和抽象的组件。 如果该系统包含多个其他的组件,这些组件都是可变的时候,也需要在该系统和这些组件之间架桥。 如果该系统包含的某个组件所包含的组件,是可变的,那么递归地重复上述过程。 也就是说,在桥接模式中存在两个抽象,...原创 2018-03-12 00:34:20 · 808 阅读 · 0 评论 -
【寒江雪】Go实现组合模式
Composite Pattern 组合模式是以树形结构来组织组件完成某个功能。当根节点的某个方法被调用时,会遍历树结构,调用相应的方法。不过具体如何设计是因人而异的。 它突出的是整体和部分的关系。实现 组合模式的结构中有两种类型,一种是分支节点,它包含了子节点列表,可以往里边添加和删除节点。另一种是叶子节点,叶子节点没有子节点。这两种节点都实现了同一个接口:Compo...原创 2018-03-12 20:55:48 · 638 阅读 · 0 评论 -
【寒江雪】Go实现装饰者模式
Decorator Pattern 装饰着模式可以在需要扩展某个类的时候,动态地修改而不需要在内部添加代码,也可以防止类爆炸。 装饰者模式可以提供了灵活地扩展方案.实现 实现一个日志的自定义功能.package decoratorimport ( "time" "fmt")type LogDecorate interface { ...原创 2018-03-13 00:58:53 · 783 阅读 · 0 评论 -
【寒江雪】Go实现外观模式
Facade Pattern 外观模式其实就是把复杂的东西给封装,由统一的接口进行操作。这样可以简化用户的使用。例子 如果要开一家饭馆,一个饭馆分为采购的,管仓库的,切菜的,炒菜的,吃菜的。 而采购的,管仓库的,切菜的,炒菜的,是厨房。吃菜的,是客户。客户并不希望知道厨房工作的细节,只希望告诉厨房自己想吃什么就行了,他不想告诉厨房要去买什么菜,怎么切,怎么炒。而巧的是,...原创 2018-03-13 14:03:16 · 343 阅读 · 0 评论 -
【寒江雪】Go实现享元模式
Flyweight Pattern 享元模式使用共享物件,来尽可能多地减少内存使用量以及共享给尽可能多的相似组件。 它适合用于当大量物件只是重复因而导致无法令人接受的使用大量内存。通常物件中的部分状态是可以分享。常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元。实现 我们举个例子:游戏中的角色都有基础属性游戏中的角色都会穿上装备装备是不同的单基础...原创 2018-03-13 16:06:44 · 645 阅读 · 0 评论 -
【寒江雪】Go实现代理模式
Proxy Pattern 代理模式使得一个对象可以给另一个对象提供访问控制。截取所有访问。实现 代理模式可以使用在很多地方,例如网络连接,内存中大的对象,一个文件,或者其他消耗大的对象,或者是不可能被复制的对象。下面是一个简单的例子。package proxyimport ( "fmt" "sync")type IObject inter...原创 2018-03-13 18:16:51 · 1011 阅读 · 0 评论 -
【寒江雪】Go实现责任链模式
Chain of Responsibility Pattern 责任链模式为请求创建了一个接收者对象的链。处理请求的对象是一系列链条,或者一个集合。每个处理节点都保存有其他处理节点的引用。接收到请求的时候,会判断该请求是否需要自己处理,处理完毕传给下一个处理节点,有点像流水线作业。例子 让我举一个复杂一点的例子。我就不用链条的形式来写了,我用一个map来保存处理器的引用。 ...原创 2018-03-14 00:07:06 · 2241 阅读 · 0 评论 -
【寒江雪】Go实现命令模式
Command Pattern 命令模式将命令包裹在对象中,并传给调用对象。调用对象寻找处理该命令的合适对象,并把该命令传给合适的对象,该对象执行命令。例子 举一个例子,在go里边调用C语言的代码,来监听键盘的输入,并调用与输入绑定的函数。 定义事件码和事件结构。const ( EVENT_CODE_KEY = iota)type EventCode...原创 2018-03-14 17:26:39 · 1129 阅读 · 0 评论 -
【寒江雪】Go实现中介者模式
Mediator Pattern 中介者模式定义一个中介对象来封装系列对象之间的交互。各个对象不需要显示地相互引用,从而使其耦合性松散,而且可以独立地改变它们之间的交互。实现 说起中介,就想到买房。package mediatorimport ( "fmt" "gopkg.in/mgo.v2/bson")type Mediator interf...原创 2018-03-15 21:00:21 · 748 阅读 · 0 评论