Design patterns 单件模式的替代方案?

Design patterns 单件模式的替代方案?,design-patterns,architecture,singleton,Design Patterns,Architecture,Singleton,我正试图设计一种更灵活的单身形式 我试图解决的问题如下: 单例测试不容易 他们滥用面向对象的方法,不允许继承,代码变得线性,许多开发人员倾向于过度使用它们 它们仅限于一个实例,即在不复制类本身的情况下复制相同的机制(例如,ThreadPool作为每个应用程序的单例运行的方式,但每个应用程序都有自己的实例) 现在,我提出的解决方案如下: 使Singleton类成为具有内部 构造函数(只能由相同包的类访问) 与每个面向产品的类一样,所有静态属性和 静态常量被移动到一个内部SingletonSh

我正试图设计一种更灵活的单身形式

我试图解决的问题如下:
  • 单例测试不容易
  • 他们滥用面向对象的方法,不允许继承,代码变得线性,许多开发人员倾向于过度使用它们
  • 它们仅限于一个实例,即在不复制类本身的情况下复制相同的机制(例如,ThreadPool作为每个应用程序的单例运行的方式,但每个应用程序都有自己的实例)
现在,我提出的解决方案如下:
  • 使Singleton类成为具有内部 构造函数(只能由相同包的类访问)
  • 与每个面向产品的类一样,所有静态属性和 静态常量被移动到一个内部
    SingletonShared
    类,该类 将作为参数传递给Singleton的构造函数。那些 其中两个隐藏在具有静态 方法
    getInstance(键)
  • 如果我们处理的是一个更复杂的系统 singleton需要它自己独特的一组参数,我添加了一个
    setAdapter(adapter)
    SingletonFactory
    的静态方法。使用 方法
    getShared(key)
    ,一个实现
    ISingletonAdapter
    应返回该实例的
    SingletonShared
    值(例如。,
    SingletonXmlAdapter
    将Xml文件传递给构造函数,然后 根据给定的密钥反序列化某个节点)
以上所有内容都打包为一个
Singleton

现在,出于测试能力的目的,可以选择将Singleton标记为内部类,并让它实现一个
ISingleton
公共接口

问题:
  • 这个解决方案可以接受吗
  • 有没有更好/更干净/更短的方法达到同样的效果
  • 哪个版本最好(单例作为内部版本,构造函数作为内部版本)

  • 谢谢

    我认为您所描述的
    SingletonFactory
    解决方案就是模式,而您的singleton就是服务

    这个解决方案可以接受吗

    取决于如何在哪里使用单例。单例本身并不坏,只要您隔离依赖于它们的代码。否则,每次需要测试夹具时,都会注入大量复杂的单例

    如果您实例化单例而不是使用静态getter/setter,那么在不使用DI框架的情况下进行依赖项注入将更加困难,除非您将单例传递进来,否则最终可能会得到一长串参数

    有没有更好/更干净/更短的方法达到同样的效果


    和(微妙的不同)通常用于控制依赖项,否则这些依赖项将是单例的。然而,即使您消除了单身人士的弊端,尝试隔离依赖特定服务的领域仍然是一种良好的做法。

    您可能也希望在这里提出您的问题: