设计模式案例 (三)

文章目录

系列文章目录

第一章 设计模式案例 (一)

第二章 设计模式案例 (二)

第三章 设计模式案例 (二)


文章目录


前言

上一篇文章介绍了常用的几种设计模式和常用场景,便于对设计模式加深理解,此文章主要讲解设计模式的案例。


一、单例模式

懒汉模式

case 包

代码如下(示例):

go 复制代码
package _case

type Config struct {
	name string
}

func (c *Config) GetName() string {
	return c.name
}
go 复制代码
package _case

var lazyConf *Config

// 懒汉式加载,单例模式,非线程安全
func GetLazyConfig() *Config {
	if lazyConf == nil {
		lazyConf = &Config{
			name: "lazy config",
		}
	}
	return lazyConf
}

代码如下(示例):main

go 复制代码
package main

import (
	_case "design-pattern/singleton/case"
	"fmt"
)

func main() {
	var conf *_case.Config
	conf = _case.GetLazyConfig()
	fmt.Println(conf.GetName())

	conf = _case.GetHungryConfig()
	fmt.Println(conf.GetName())

	conf = _case.GetCheckLockerConf()
	fmt.Println(conf.GetName())

	conf = _case.GetOnceConf()
	fmt.Println(conf.GetName())
}

饿汉模式

case 包

代码如下(示例):

go 复制代码
package _case

var hungryConf *Config

func init() {   //先初始化
	hungryConf = &Config{
		name: "hungry config",
	}
}

// 饿汉式 单例模式
func GetHungryConfig() *Config {
	return hungryConf
}

懒汉模式枷锁

case 包

代码如下(示例):简单工厂

go 复制代码
package _case

import "sync"

var checkLockerConf *Config
var checkLocker sync.Mutex

// 带检查锁的单例模式
func GetCheckLockerConf() *Config {
	if checkLockerConf == nil {
		checkLocker.Lock()
		defer checkLocker.Unlock()
		if checkLockerConf == nil {
			checkLockerConf = &Config{
				name: "check locker config",
			}
		}
	}
	return checkLockerConf
}
go 复制代码
package _case

import "sync"

var onceConf *Config
var once sync.Once

func GetOnceConf() *Config {
	once.Do(func() {
		onceConf = &Config{
			name: "once config",
		}
	})
	return onceConf
}
相关推荐
codingandsleeping2 小时前
使用orval自动拉取swagger文档并生成ts接口
前端·javascript
白水清风3 小时前
微前端学习记录(qiankun、wujie、micro-app)
前端·javascript·前端工程化
用户22152044278004 小时前
new、原型和原型链浅析
前端·javascript
阿星做前端4 小时前
coze源码解读: space develop 页面
前端·javascript
叫我小窝吧4 小时前
Promise 的使用
前端·javascript
前端康师傅5 小时前
JavaScript 作用域
前端·javascript
云枫晖5 小时前
JS核心知识-事件循环
前端·javascript
eason_fan6 小时前
Git 大小写敏感性问题:一次组件重命名引发的CI构建失败
前端·javascript
前端付豪7 小时前
1、震惊!99% 前端都没搞懂的 JavaScript 类型细节
前端·javascript·面试
朝与暮7 小时前
js符号(Symbol)
前端·javascript