文档章节

golang singleton 单件模式

F
 FaintX
发布于 2014/05/03 23:38
字数 265
阅读 92
收藏 0

单件模式 singleton

    它是为了提供一个全局实例。比如数据库连接,如果每个用户和线程都独立申请,那么很快就会达到数据库连接的上限。不使用全局变量是因为:

  • 部分语言没有全局变量;

  • 全局变量一样无法阻止类多次实例化。

    

    最终目的是确保只有一个全局实例的办法,比如通过约定俗成的Instance()获得该类实例,Instance()保证不会重复创建。又或者无法调用类的构造函数,而只能调用类的获取实例函数,这样就实现了无法创建新实例的目的。


---


目录结构

main.go

./singleton/singleton.go


singleton.go

package singleton

import (
	"fmt"
)

var _self *Singleton

type Singleton struct {
	Name string
}

func Instance() *Singleton {
	if _self == nil {
		_self = new(Singleton)
		return _self
	}
	return _self
}

func (o *Singleton) SetName(s string) {
	_self.Name = s
}

func (o *Singleton) GetName() {
	fmt.Println("Name:", _self.Name)
}


main.go

package main

import (
	"./singleton"
)

func main() {
	a := singleton.Instance()
	b := singleton.Instance()

	a.SetName("funny")
	b.SetName("Test")
	a.GetName()

	return
}


结果: Name: Test




© 著作权归作者所有

上一篇: c++ server example
下一篇: Go 学习笔记 1
F
粉丝 2
博文 10
码字总数 5378
作品 0
厦门
私信 提问
说说设计模式~单件模式(Singleton)

单件模式(Singleton)要求一个类有且仅有一个实例,并且提供了一个全局的访问点。 从概念上来研究一下它的实现,不考虑线程安全 1 public sealed class Singlton 2 { 3 static Singlton ins...

mcy247
2017/12/07
0
0
Qt 下 Singleton 模式小记

The Singleton pattern restricts a class so that only one instance can be created. This can be accomplished by making its constructor private or protected and providing an instan......

晨曦之光
2012/05/08
311
0
C++只允许实例化一次的类

1. 意图 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 2. 动机 对一些类来说,只有一个实例是很重要的。虽然系统中可以有许多打印机,但却只应该有一个打印假脱机( printer sp...

云栖希望。
2017/12/10
0
0
设计模式 —— 单例模式, Singleton Patttern

参考资料: http://wuchong.me/blog/2014/08/28/how-to-correctly-write-singleton-pattern/ http://blog.csdn.net/qq17766199/article/details/50225395 http://www.cnblogs.com/coffee/arc......

sarashare
2016/03/15
66
0
创建型模式:Singleton单件

创建型模式:Singleton单件 1、模式分类 1)从目的来看: A:创建型(Creational)模式:负责对象创建。 B:结构型(Structural)模式:处理类与对象间的组合。 C:行为型(Behavioral)模...

flyhighly
2011/04/24
71
0

没有更多内容

加载失败,请刷新页面

加载更多

75、GridFS

GridFS是MongoDB提供的用于持久化存储文件的模块,CMS使用Mongo DB存储数据,使用FGridFS可以快速集成开发。 工作原理: 在GridFS存储文件是将文件分块存储,文件会按照256KB的大小分割成多个...

lianbang_W
今天
4
0
js bind 绑定this指向

本文转载于:专业的前端网站➱js bind 绑定this指向 1、示例代码 <!DOCTYPE html><html lang="zh"> <head> <meta charset="UTF-8" /> <title>bind函数绑定this指向......

前端老手
今天
4
0
CentOS Linux 7上将ISO映像文件写成可启动U盘

如今,电脑基本上都支持U盘启动,所以,可以将ISO文件写到U盘上,用来启动并安装操作系统。 我想将一个CentOS Linux 7的ISO映像文件写到U盘上,在CentOS Linux 7操作系统上,执行如下命令: ...

大别阿郎
今天
4
0
深入vue-公司分享ppt

组件注册 全局注册 注册组件,传入一个扩展过的构造器 Vue.component('my-component', Vue.extend({/*...*/})) 注册组件,传入一个选项对象(自动调用Vue.extend) Vue.component('my-comp...

莫西摩西
今天
5
0
gitlab重置管理员密码

登录gitlab服务器 [root@localhost bin]# sudo gitlab-rails console productionLoading production environment (Rails 5.2.3)irb(main):001:0> u = User.where(email: 'admin@example.co......

King华仔o0
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部