Ios 单件Vs单件工厂
我们的系统有很多模型对象(例如,Ios 单件Vs单件工厂,ios,objective-c,design-patterns,Ios,Objective C,Design Patterns,我们的系统有很多模型对象(例如,汽车,行人,道路,…) 目前,它们都有管理器(CarManager,PedestrianManager,RoadManager),这些管理器返回各自类别的单例 建议的另一种选择是使用ManagerFactory单例,该单例可以返回CarManager、PedestrianManager、RoadManager的实例。(例如,ManagerFactory.getInstance().getCarManager()) 我们还为该项目编写了测试,问题是如果我们使用依赖注
汽车
,行人
,道路
,…)
目前,它们都有管理器(CarManager
,PedestrianManager
,RoadManager
),这些管理器返回各自类别的单例
建议的另一种选择是使用ManagerFactory
单例,该单例可以返回CarManager
、PedestrianManager
、RoadManager
的实例。(例如,ManagerFactory.getInstance().getCarManager()
)
我们还为该项目编写了测试,问题是如果我们使用依赖注入,我们将需要一个对象的实际实例来注入管理器
这个选择好吗?在这种情况下,您会将单例更改为其他内容吗?单例直接或单例工厂基本上是相同的内容-对某个内容的不透明引用-隐藏的依赖项。通过全局文本搜索,您可以找到这些依赖项,因此这两个选项都不会使情况变得更好或更糟 依赖注入意味着您公开声明,例如实例A要工作,它需要一个实例B(或者符合协议C的实例是更好的依赖情况)。这需要在某个地方实例化B并将其传递给A 从测试的角度来看,依赖注入要高得多,因为您通常希望创建B的模拟版本,并使用该版本来测试a。测试将注入要使用的实例。测试单身是一件痛苦的事
因此,理想情况下,所涉及的第一个类将创建一个B的实例,并将其传递给其他需要它的类,然后该实例将从那里继续传递。这是我的观点,但我会选择任何一个选项,使代码不同部分之间的耦合/交叉依赖最少。以及任何需要您在代码库中传播代码工作方式知识的内容,如果这有道理的话。但是我的直觉是不要使用
ManagerFactory
——我认为这不太复杂。所以总体来说,你说的是这两种方法是一样的,但是第二种方法更好,因为它允许依赖注入?单例不能阻止依赖注入本身,但是如果您使用依赖注入,您通常不会使用单例。对于工厂,如果它增加了一些值,就使用它,如果它实际上只是调用alloc+init,那么它不增加值,如果它有一些构建器逻辑,那么它可能会增加值。