Design patterns 单件模式的替代方案?
我正试图设计一种更灵活的单身形式 我试图解决的问题如下:Design patterns 单件模式的替代方案?,design-patterns,architecture,singleton,Design Patterns,Architecture,Singleton,我正试图设计一种更灵活的单身形式 我试图解决的问题如下: 单例测试不容易 他们滥用面向对象的方法,不允许继承,代码变得线性,许多开发人员倾向于过度使用它们 它们仅限于一个实例,即在不复制类本身的情况下复制相同的机制(例如,ThreadPool作为每个应用程序的单例运行的方式,但每个应用程序都有自己的实例) 现在,我提出的解决方案如下: 使Singleton类成为具有内部 构造函数(只能由相同包的类访问) 与每个面向产品的类一样,所有静态属性和 静态常量被移动到一个内部SingletonSh
- 单例测试不容易
- 他们滥用面向对象的方法,不允许继承,代码变得线性,许多开发人员倾向于过度使用它们
- 它们仅限于一个实例,即在不复制类本身的情况下复制相同的机制(例如,ThreadPool作为每个应用程序的单例运行的方式,但每个应用程序都有自己的实例)
- 使Singleton类成为具有内部 构造函数(只能由相同包的类访问)
- 与每个面向产品的类一样,所有静态属性和
静态常量被移动到一个内部
类,该类 将作为参数传递给Singleton的构造函数。那些 其中两个隐藏在具有静态 方法SingletonShared
getInstance(键)
- 如果我们处理的是一个更复杂的系统
singleton需要它自己独特的一组参数,我添加了一个
到setAdapter(adapter)
的静态方法。使用 方法SingletonFactory
,一个实现getShared(key)
应返回该实例的ISingletonAdapter
值(例如。,SingletonShared
将Xml文件传递给构造函数,然后 根据给定的密钥反序列化某个节点)SingletonXmlAdapter
Singleton
包
现在,出于测试能力的目的,可以选择将Singleton标记为内部类,并让它实现一个ISingleton
公共接口
问题:
谢谢 我认为您所描述的
SingletonFactory
解决方案就是模式,而您的singleton就是服务
这个解决方案可以接受吗
取决于如何和在哪里使用单例。单例本身并不坏,只要您隔离依赖于它们的代码。否则,每次需要测试夹具时,都会注入大量复杂的单例
如果您实例化单例而不是使用静态getter/setter,那么在不使用DI框架的情况下进行依赖项注入将更加困难,除非您将单例传递进来,否则最终可能会得到一长串参数
有没有更好/更干净/更短的方法达到同样的效果
和(微妙的不同)通常用于控制依赖项,否则这些依赖项将是单例的。然而,即使您消除了单身人士的弊端,尝试隔离依赖特定服务的领域仍然是一种良好的做法。您可能也希望在这里提出您的问题: