我使用的是统一,我正在创建一个封装它的类,我不知道如何调用它,服务定位器或工厂,都封装了对象的创建,所以.有什么关系呢?
发布于 2011-11-30 12:03:35
工厂应请求为您创建对象。
服务定位器返回可能已经存在的对象,即可能已经存在于您的某个地方的服务。
想想这些名字的含义:
created.
发布于 2015-02-08 02:46:01
实际上,这两种模式之间存在着明显的分离。众所周知,这两种模式都用于避免来自具体类型的依赖。
不过,读完后
Rober . Martin
出现了一些严重的矛盾:
Seemann说:“抽象工厂是泛型类型,创建方法的返回类型由工厂本身的类型决定,换句话说,构造的类型只能返回单个类型的实例。”
RoberC.Martin没有提到泛型类型,而且,他的书中的工厂示例允许创建多个类型的对象的实例,在Factory.Make()中使用键字符串作为参数来区分它们。
Gamma说抽象工厂的意图是“为创建相关或依赖对象的家族提供一个接口,而不指定它们的具体类”。值得一提的是,Gamma抽象工厂示例违反了Martin提出的接口隔离原则(ISP)。ISP和SOLID在一般情况下是更现代的原则,也可能是为了简单而省略。
伽马和马丁的作品先于西曼的作品,所以我认为他应该遵循已经做出的定义。
Fowler提出服务定位器作为一种实现依赖反转的方法,而Seemann则认为它是一种反模式。Gamma和Martin都没有提到服务定位器。
但是,Seemann和Fowler在Service中同意需要一个配置步骤来注册一个具体化类的实例,该实例将在请求该类型的对象时返回。Martin或Gamma在抽象工厂的定义中没有提到这个配置步骤。抽象工厂模式假设每次请求此类对象时都会实例化一个新对象。
结论
服务定位器和抽象工厂之间的主要区别是,抽象工厂假设在每个请求时实例化一个新的对象,并在每个请求时返回一个返回的对象,并且服务定位器需要配置一个对象实例,并且每次都会返回相同的实例。
发布于 2011-11-30 12:02:22
读马克·西曼的这篇文章
http://blog.ploeh.dk/2010/11/01/PatternRecognitionAbstractFactoryOrServiceLocator.aspx http://blog.ploeh.dk/2010/02/03/ServiceLocatorIsAnAntiPattern.aspx
这对我们开始
https://stackoverflow.com/questions/8325619
复制相似问题