github:https://github.com/sevenelevenlee/go-patterns Golang设计模式思想 前言 一切设计模式都是灵活应用struct的组合模式,以及go隐形继承接口的特性 go中的interface就是一些方法装饰, 而struct并不依赖于接口 设计模式
转载 2020-02-21 22:30:00
185阅读
package fatory import "fmt" type Device interface{    StartDevice() } type KeyBoard struct { } func (k *KeyBoard) StartDevice(){    fmt.Println("Keyboard is ready to work!") } type Mouse struct 
原创 2020-05-17 21:12:04
1237阅读
[选项模式] package main import "fmt" type OptionFunc func(*DoSomethingOption) type DoSomethingOption struct { a int b string c bool } func NewDoSomethingO
原创 2024-02-19 16:23:25
12阅读
type Options struct { StrOption1 string StrOption2 string StrOption3 string IntOption1 int IntOption2 int IntOption3 int} type Option func(opts *Optio
原创 2022-05-13 10:41:12
165阅读
要点:sync.Once 的应用高并发场景下读写锁    package singleton import "sync" var  (    p *Pet    once sync.Once ) func init(){    once.Do(       func() {          p = &Pet{}       }) } func GetInstance() *Pet
原创 2020-05-18 21:35:30
690阅读
Golang设计模式-单例模式
转载 2021-07-30 15:37:00
210阅读
2评论
工厂模式是一种创建型模式,也是最常用的设计模式之一。调用方通过工厂产出并获取对象,可以不必关注对象创建的细节和构建逻辑。 在工厂模式下,调用方只和工厂进行交互,并告诉工厂具体获取哪种类型的对象。工厂负责和相应的struct交互,并返回需要的对象。 如下是工厂模式的UML类图: 接下来是一个工厂模式的 ...
转载 2021-09-05 22:44:00
552阅读
2评论
命令模式是一种行为型模式。它建议将请求封装为一个独立的对象。在这个对象里包含请求相关的全部信息,因此可以将其独立执行。 在命令模式中有如下基础组件: Receiver:唯一包含业务逻辑的类,命令对象会将请求传递给它,请求的最终处理者 Command:组装了一个Receiver成员,并绑定实现了Rec ...
转载 2021-10-02 19:20:00
208阅读
2评论
Golang 常见设计模式之装饰模式想必只要是熟悉 Python 的同学对装饰模式一定不会陌生,这类 Python 从语法上原生支持的装饰器,大大提高了装饰模式在 Python 中的应用。尽管 Go 语言中装饰模式没有 Python 中应用的那么广泛,但是它也有其独到的地方。接下来就一起看下装饰模式在 Go 语言中的应用。简单装饰器我们通过一个简单的例子来看一下装饰器的简单应用,首先编写一个 he
原创 2022-09-08 14:35:48
147阅读
建造者模式是一种创建型模式,主要用来创建比较复杂的对象。 建造者模式的使用场景: 建造者模式通常适用于有多个构造器参数或者需要较多构建步骤的场景。使用建造者模式可以精简构造器参数的数量,让构建过程更有条理。 可以为同一个产品提供两个不同的实现。比如,在下面的代码中,为house类型创建了两个不同的实 ...
转载 2021-09-05 10:48:00
198阅读
2评论
迭代器模式是一种行为型模式。在这种模式中,集合结构会提供一个迭代器。通过这个迭代器可以顺序遍历集合中的每个元素而不需要暴露其具体的实现。 下面是迭代器模式的一些具体实现: Iterator 接口: 这个接口会定义一些基础的操作函数,如hasNext()或getNext()等。通过名称就可以看出,这些 ...
转载 2021-10-02 22:25:00
479阅读
2评论
之前我们介绍了工厂设计模式,现在我们再看一下抽象工厂设计模式。抽象工程模式顾名思义就是对工厂模式的一层抽象,也是创建型模式的一种,通常用来创建一组存在相关性的对象。 UML类图大致如下: 类图比较复杂,最好用个例子来说明。比方说,国内有两家生产运动服的工厂:nike和adidas 。现在我们想购买一 ...
转载 2021-09-07 07:05:00
280阅读
2评论
单例模式恐怕是最为人熟知的一种设计模式了。它同样也是创建型模式的一种。当某个struct只允许有一个实例的时候,我们会用到这种设计模式。这个struct的唯一的实例被称为单例对象。下面是需要创建单例对象的一些场景: 数据库实例:一般在开发中,对于一个应用,我们通常只需要一个数据库对象实例 日志实例: ...
转载 2021-09-10 22:12:00
103阅读
2评论
原型模式也是一种创建型模式,它可以帮助我们优雅地创建对象的拷贝。在这种设计模式里面,将克隆某个对象的职责交给了要被克隆的这个对象。被克隆的对象需要提供一个clone()方法。通过这个方法可以返回该对象的拷贝。 原型模式的使用场景: 创建新对象的操作比较耗资源(如数据库操作)或代价比较高时。比较起从头 ...
转载 2021-09-11 21:52:00
221阅读
2评论
责任链模式是一种行为型设计模式。在这种模式中,会为请求创建一条由多个Handler组成的链路。每一个进入的请求,都会经过这条链路。这条链路上的Handler可以选择如下操作: 处理请求或跳过处理 决定是否将请求传给这条链路上的下一个Handler 下面是责任链模式的用例图: 关于责任链模式的用途最好 ...
转载 2021-09-25 20:32:00
459阅读
2评论
Golang 常见设计模式之选项模式熟悉 Python 开发的同学都知道,Python 有默认参数的存在,使得我们在实例化一个对象的时候,可以根据需要来选择性的覆盖某些默认参数,以此来决定如何实例化对象。当一个对象有多个默认参数时,这个特性非常好用,能够优雅地简化代码。而 Go 语言从语法上是不支持默认参数的,所以为了实现既能通过默认参数创建对象,又能通过传递自定义参数创建对象,我们就需要通过一些
原创 2022-09-08 14:00:58
101阅读
这次介绍最后一个创建型模式——对象池模式。顾名思义,对象池模式就是预先初始化创建好多个对象,并将之保存在一个池子里。当需要的时候,客户端就可以从池子里申请一个对象使用,使用完以后再将之放回到池子里。池子里的对象在应用运行期间永远不会被破坏或回收。 适用场景: 当需要的对象的创建成本比较高,且该类型的 ...
转载 2021-09-12 19:25:00
391阅读
2评论
中介者模式是一种行为型设计模式。在中介者模式中创建了一个中介对象来负责不同类间的通信。因为这些类不需要直接交互,所以也就能避免它们之间的直接依赖,实现解耦的效果。 中介者模式的一个典型案例是老式小火车站。为保证铁路系统稳定运行,两列火车一般不会直接通信,而是听从车站管理员的调度。这里车站管理员就是一 ...
转载 2021-10-16 22:37:00
158阅读
2评论
之前我们已经看过了 Golang 常见设计模式中的装饰和选项模式,今天要看的是 Golang 设计模式里最简单的单例模式。单例模式的作用是确保无论对象被实例化多少次,全局都只有一个实例存在。根据这一特性,我们可以将其应用到全局唯一性配置、数据库连接对象、文件访问对象等。Go 语言实现单例模式的方法有很多种,下面我们就一起来看一下。饿汉式饿汉式实现单例模式非常简单,直接看代码:package sin
原创 2022-08-26 11:01:36
89阅读
备忘录模式是一种行为型设计模式。这种模式允许我们保存对象在某些关键节点时的必要信息,以便于在适当的时候可以将之恢复到之前的状态。通常它可以用来帮助设计撤销/恢复操作。 下面是备忘录设计模式的主要角色: Originator(发起者):Originator是当前的基础对象,它会将自己的状态保存进备忘录 ...
转载 2021-10-17 11:53:00
56阅读
2评论
  • 1
  • 2
  • 3
  • 4
  • 5