单件模式
编辑教程单件模式
问题
许多时候你想要一个,并且只要一个类的实例。 例如:你可能需要一个创建服务器资源的类,并且你想要保证使用一个对象就可以控制这些资源。
注意
单件模式可以很容易被滥用来模拟量化的变量变量。
解决方案
公有类只包含获得一个实例的方法。实例被保存在该公共对象的闭包中,并且总是有返回值。
这很奏效,因为CoffeeScript允许您在一个类的声明中定义定义的状态。
但是,因为大多数CoffeeScript编译成一个IIFE包,如果这个方式适合你,就不需要在类的声明中放置私有的类。
之后的内容可能对开发编程代码有所帮助,例如,CommonJS(Node.js)或Require.js中可见(见实例讨论)。
class Singleton
# You can add statements inside the class definition
# which helps establish private scope (due to closures)
# instance is defined as null to force correct scope
instance = null
# Create a private class that we can initialize however
# defined inside this scope to force the use of the
# singleton class.
class PrivateClass
constructor: (@message) ->
echo: -> @message
# This is a static method used to either retrieve the
# instance or create a new one.
@get: (message) ->
instance ?= new PrivateClass(message)
a = Singleton.get "Hello A"
a.echo() # => "Hello A"
b = Singleton.get "Hello B"
b.echo() # => "Hello A"
Singleton.instance # => undefined
a.instance # => undefined
Singleton.PrivateClass # => undefined
讨论
通过上例可以看到,所有的实例是如何从同一个Singleton类的实例中输出的。 也可以看到,私有类和实例变量都无法在Singleton class外被访问到。
Singleton class的本质是提供一个静态方法得到只返回一个私有类的实例。 它也对外部也隐藏私有类,因此您无法创建一个自己的私有类。
隐藏或使私有类在内部运作的想法是更受偏爱的。 尤其是由于更改的CoffeeScript将编译的代码封装在自己的IIFE(闭包)中, 可以定义类而无须担心会被文件外部访问到。
在这个实例中,注意, 用惯用的模块导出特点来强调模块中可被公共访问的部分。
root = exports ? this
# Create a private class that we can initialize however
# defined inside the wrapper scope.
class ProtectedClass
constructor: (@message) ->
echo: -> @message
class Singleton
# You can add statements inside the class definition
# which helps establish private scope (due to closures)
# instance is defined as null to force correct scope
instance = null
# This is a static method used to either retrieve the
# instance or create a new one.
@get: (message) ->
instance ?= new ProtectedClass(message)
# Export Singleton as a module
root.Singleton = Singleton
可以注意到咖啡officescript简单简单地实现这个设计模式。
Mos固件,小电视必刷固件
ES6 教程
Vue.js 教程
JSON 教程
jQuery 教程
HTML 教程
HTML 5 教程
CSS 教程
CSS3 教程
JavaScript 教程
DHTML 教程
JSON在线格式化工具
JS在线运行
JSON解析格式化
jsfiddle中国国内版本
JS代码在线运行
PHP代码在线运行
Java代码在线运行
C语言代码在线运行
C++代码在线运行
Python代码在线运行
Go语言代码在线运行
C#代码在线运行
JSRUN闪电教程系统是国内最先开创的教程维护系统, 所有工程师都可以参与共同维护的闪电教程,让知识的积累变得统一完整、自成体系。
大家可以一起参与进共编,让零散的知识点帮助更多的人。
X
选择支付方式:
立即支付
¥
9.99
无法付款,请点击这里
金额: 0 元
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
如有疑问请联系QQ:565830900
正在生成二维码, 此过程可能需要15秒钟