第2节 单一职责原则
❤️💕💕Java和Golang的设计模式,设计模式介绍、创建者模式、结构型模式、行为型模式。Myblog:http://nsddd.top
[TOC]
什么是单一职责原则
单一职责原则
类的职责单一,对外只提供一种功能,二引起类变化的原因都只有一个
Go语言中通常如何实现单例模式
在Go语言中,可以使用懒汉式或饿汉式来实现单例模式。
懒汉式
在懒汉式中,实例对象不会在程序初始化时被创建,而是在第一次调用该实例对象时才会被创建。这种方式可以避免不必要的资源浪费。下面是一个使用懒汉式实现单例模式的示例代码:
package main
import (
"fmt"
"sync"
)
type singleton struct{}
var instance *singleton
var once sync.Once
func GetInstance() *singleton {
once.Do(func() {
instance = &singleton{}
})
return instance
}
func main() {
s1 := GetInstance()
s2 := GetInstance()
fmt.Println(s1, s2)
// if s1 == s2
if s1 == s2 {
fmt.Println("s1 == s2") // yes
} else {
fmt.Println("s1 != s2")
}
}
在上述实现中,once
对象保证了GetInstance()
函数只会被执行一次。第一次调用GetInstance()
函数时,once.Do()
方法会执行传递给它的匿名函数,该匿名函数会创建一个新的singleton
对象,并将它赋值给instance
变量。之后再次调用GetInstance()
函数时,就会直接返回已经创建好的instance
变量。
饿汉式
在饿汉式中,实例对象在程序初始化时就会被创建。这种方式可以保证在任何时候都能够获得该实例对象,但是可能会造成不必要的资源浪费。下面是一个使用饿汉式实现单例模式的示例代码:
package singleton
type singleton struct {}
var instance *singleton = &singleton{}
func GetInstance() *singleton {
return instance
}
代码
💡简单的一个案例如下:
/*
* @Description: 单一职责原则
* @Author: xiongxinwei 3293172751nss@gmail.com
* @Date: 2022-10-26 20:08:39
* @LastEditTime: 2022-10-26 20:15:04
* @FilePath: \code\设计模式\设计模式第1节.go
* @Github_Address: https://github.com/cubxxw/awesome-cs-cloudnative-blockchain
* Copyright (c) 2022 by xiongxinwei 3293172751nss@gmail.com, All Rights Reserved. @blog: http://nsddd.top
*/
package main
import "fmt"
type Person struct {
Name string
}
func (p *Person) Eat() {
}
func (p *Person) Sleep() {
}
func (p *Person) Work() {
}
func (p *Person) Drive() {
}
// Path: 设计模式\设计模式第1节.go
//上面的代码可以设计成单一职责原则
type User struct {
Name string
}
type Password struct {
Password string
}
func (p *User) GetInfo() {
fmt.Println("获取用户信息")
}
func (p *Password) GetInfo() {
fmt.Println("获取密码信息")
}
func main() {
p := &Person{}
p.Eat()
p.Sleep()
p.Work()
p.Drive()
//单一职责原则
u := &User{}
u.GetInfo()
pwd := &Password{}
pwd.GetInfo()
}
🚀 编译结果如下:
[Running] go run "d:\文档\最近的\awesome-golang\docs\go-advancend\code\设计模式\设计模式第1节.go"
获取用户信息
获取密码信息
END 链接
✴️版权声明 © :本书所有内容遵循CC-BY-SA 3.0协议(署名-相同方式共享)©