当前位置:  开发笔记 > 程序员 > 正文

Monostate是邪恶的单身人士的堂兄吗?

如何解决《Monostate是邪恶的单身人士的堂兄吗?》经验,为你挑选了3个好方法。

Singleton绝对是最滥用和滥用的模式之一.我们中的许多人已经在某一时刻感染过单一炎症.奇怪的是,它的近亲Monostate不那么有名,而且使用率较低.您对Monostate有何看法?善还是恶?它是使用Singleton的更好选择吗?您是否也会像使用Singleton一样阻止它的使用?



1> 小智..:

嗯,monostate Singleton ...所以它有完全相同的问题.

测试

隐藏依赖关系

呆板

线程安全

全球状态使得难以确保正确性


Monostate与单身人士不同,或者我不会提出这个问题.https://segueuserfiles.middlebury.edu/xp/SingletonAndMonostate.pdf

2> Dustin Getz..:

如何不使用模式只是因为?

更新:滥用单身人员是因为人们添加了没有理由的模式.它经常增加任意约束,没有任何好处.使用monostate w/o理由可能不那么有害,但没有理由.如果宇宙不会崩溃,如果有多个实例,则不要使用模式强制执行 - 只需创建一个实例.



3> Erik Funkenb..:

根据Monostates的这个定义,这是注意:

"Monostates就像SingletonsAreEvil一样邪恶."

我不一定同意.基本前提是Singletons和Monostates是全局变量,因为Globals是邪恶的,所以Singletons和Monostates也必须如此.

这种推理的问题在于它没有考虑为什么全局变量是邪恶的.全局变量是邪恶的,主要是因为它们是可以在本地范围之外意外访问的变量,类似于非类型语言通常只允许通过引用变量来创建变量.

Singletons和Monostates不会导致同样的问题,因为它几乎不可能"意外地"引用全局静态,调用它的实例方法,然后使用实例.

换句话说,全局变量是邪恶的,因为它们会导致细微而难以察觉的问题.单身人士和单身人士不会造成同样的问题,所以我不会因为同样的原因而认为他们是邪恶的,这是大多数人在这个论点中似乎出错的地方.

现在,单身人士和单身人士会引起其他类型的问题吗?当然.显然,TDD人讨厌他们,因为他们很难通过自动化测试正确测试.好的,很好,但对于那些不使用TDD的人来说,这些问题并不存在.

当然,单身人士可能会被滥用.仅仅为了避免传递实例而使用它们的人滥用它们.我认为Monostates比单身人士更好.

许多人提出工厂模式而不是单身人士,但我觉得工厂只是花哨的单身生成器.不,没有静态"实例"方法,但它基本上做同样的事情(当工厂创建单个实例对象时).Factory.Create与Singleton.Instance没有什么不同.

编辑:

与Globals相比,Singletons和Monostates的一个方面是它们是共享的,因此不是线程安全的.如果您计划执行多线程应用程序,这是一个问题,如果您知道这一点,您可以采取步骤序列化对共享对象的访问.因此,这可能是唯一一个通常会将所有三种类型都视为引起麻烦的区域.

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有