设计模式案例 (三)

文章目录

系列文章目录

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

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

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


文章目录


前言

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


一、单例模式

懒汉模式

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
}
相关推荐
2401_8734794010 小时前
如何利用IP查询定位识别电商刷单?4个关键指标+工具配置方案
开发语言·tcp/ip·php
我爱cope10 小时前
【从0开始学设计模式-10| 装饰模式】
java·开发语言·设计模式
菜鸟学Python10 小时前
Python生态在悄悄改变:FastAPI全面反超,Django和Flask还行吗?
开发语言·python·django·flask·fastapi
浪浪小洋11 小时前
c++ qt课设定制
开发语言·c++
charlie11451419112 小时前
嵌入式C++工程实践第16篇:第四次重构 —— LED模板,从通用GPIO到专用抽象
c语言·开发语言·c++·驱动开发·嵌入式硬件·重构
故事和你9112 小时前
洛谷-数据结构1-4-图的基本应用1
开发语言·数据结构·算法·深度优先·动态规划·图论
幺风12 小时前
Claude Code 源码分析 — Tool/MCP/Skill 可扩展工具系统
前端·javascript·ai编程
程序猿编码12 小时前
给你的网络流量穿件“隐形衣“:手把手教你用对称加密打造透明安全隧道
linux·开发语言·网络·安全·linux内核
sg_knight13 小时前
设计模式实战:责任链模式(Chain of Responsibility)
python·设计模式·责任链模式
ID_1800790547313 小时前
淘宝 API 上货 / 商品搬家 业务场景实现 + JSON 返回示例
前端·javascript·json