我正在尝试设计一种更灵活的Singleton形式。
SingletonShared
类
将作为参数传递给Singleton的构造函数。那些
两个隐藏在公共SingletonFactory
后面,具有静态
方法getInstance(key)
。setAdapter(adapter)
到SingletonFactory
的静态方法。运用
方法getShared(key)
,一个实现ISingletonAdapter
的类
应该返回该实例的SingletonShared
值(例如,
SingletonXmlAdapter
将Xml文件传递给构造函数,并且
根据给定的密钥对某个节点进行反序列化。以上所有内容都打包为Singleton
个包。
现在,出于测试能力的目的,可以选择将Singleton标记为内部类,并使其实现ISingleton
公共接口。
谢谢!
答案 0 :(得分:5)
我认为您描述为SingletonFactory
的解决方案是ServiceLocator模式,而您的单身人士是服务。
这个解决方案可以接受吗?
取决于 如何和 您使用单身人士。单身人士本身并不坏,只要你孤立依赖他们的代码。否则,每次需要测试夹具时,最终会注入一堆复杂的Singletons。
如果你实例化Singletons而不是使用静态getter / setter,那么在不使用DI框架的情况下依赖注入会更加困难,除非你传递了单例,但最后你会得到一长串参数。
是否有更好/更清洁/更短的方法来达到同样的效果?
IoC containers和DI frameworks(微妙的不同)通常用于控制本来是单身人士的依赖关系。然而,即使你消除了Singletons的邪恶,尝试隔离对特定服务的依赖区域仍然是一种好习惯。