不做大哥好多年 不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核

逍遥子

不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核
  • GO基础

  • 面向对象

  • 并发编程

  • 常用库

  • 数据库操作

  • Beego框架

  • Beego商城

  • GIN框架

  • GIN论坛

  • 微服务

  • 设计模式

    • 01.创建模式
      • 01.单例模式
        • 1.1 单例模式介绍
        • 1.2 懒汉式(双重检测)
      • 02.简单工厂模式
        • 2.1 简单工厂模式
        • 2.2 代码演示
  • Go
  • 设计模式
xiaonaiqiang
2021-06-25
目录

01.创建模式

# 01.单例模式

# 1.1 单例模式介绍

  • **意图:**保证一个类仅有一个实例,并提供一个访问它的全局访问点。

  • **主要解决:**一个全局使用的类频繁地创建与销毁。

  • **何时使用:**当您想控制实例数目,节省系统资源的时候。

  • **如何解决:**判断系统是否已经有这个单例,如果有则返回,如果没有则创建。

  • **关键代码:**构造函数是私有的。

# 1.2 懒汉式(双重检测)

package main
import (
	"fmt"
	"sync"
)

type Singleton struct{}  // Singleton 是单例模式类
var singleton *Singleton
var once sync.Once

//GetInstance 用于获取单例模式对象
func GetInstance() *Singleton {
	once.Do(func() {
		singleton = &Singleton{}
	})
	return singleton
}

func main()  {
	ins1 := GetInstance()
	ins2 := GetInstance()
	fmt.Println(ins1 == ins2)  // true
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 02.简单工厂模式

# 2.1 简单工厂模式

  • **作用:**不直接向客户端(创建的对象)暴露对象创建的细节,而是通过一个工厂类来负责创建各种类的实例

  • go 语言没有构造函数一说,所以一般会定义NewXXX函数来初始化相关类。

  • NewXXX 函数返回接口时就是简单工厂模式,也就是说Golang的一般推荐做法就是简单工厂。

# 2.2 代码演示

package main
import (
	"fmt"
)

// 1.定义 接口
type API interface {
	Say(name string) string
}

// 2.1 hiAPI 是接口 API 一种实现
type hiAPI struct{}

// 2.2 hiAPI结构体 实现 API接口 的方法
func (*hiAPI) Say(name string) string {
	return fmt.Sprintf("Hi, %s", name)
}

// 3.1 HelloAPI 是接口 API 另外一种实现
type helloAPI struct{}

// 3.2 helloAPI结构体 实现 API接口 的方法
func (*helloAPI) Say(name string) string {
	return fmt.Sprintf("Hello, %s", name)
}

// 4.NewAPI按类型返回Api实例
func NewAPI(t string) API {
	if t == "hiAPI" {
		return &hiAPI{}
	} else if t == "helloAPI" {
		return &helloAPI{}
	}
	return nil
}

func main()  {
	// 1.工厂模式创建 hiAPI结构体 对象
	api := NewAPI("hiAPI")
	s1 := api.Say("Tom")  // Hi, Tom
	fmt.Println(s1)

	// 2.工厂模式创建 helloAPI 结构体 对象
	api2 := NewAPI("helloAPI")
	s2 := api2.Say("Tom")
	fmt.Println(s2)   // Hello, Tom
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
上次更新: 2024/3/13 15:35:10
10.限流

← 10.限流

最近更新
01
04.数组双指针排序_子数组
03-25
02
08.动态规划
03-25
03
06.回溯算法
03-25
更多文章>
Theme by Vdoing | Copyright © 2019-2025 逍遥子 技术博客 京ICP备2021005373号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式