Fri*_*ren 13 c# service design-patterns factory
我正在使用unity,我正在创建一个包装它的类,我不知道如何调用它,服务定位器或工厂,都封装了对象的创建,所以....有什么区别?
Mig*_*elo 24
工厂根据要求为您创建对象.
服务定位器返回可能已存在的对象,即可能已存在于某处的服务.
只要想想名字的含义:
小智 9
实际上这两种模式之间存在明显的分离.众所周知,两种模式都用于避免具体类型的依赖性.
但读完后
出现了一些严重的矛盾:
Seemann说:"抽象工厂是泛型类型,Create方法的返回类型由工厂本身的类型决定.换句话说,构造类型只能返回单个类型的实例."
虽然Rober C. Martin没有提及有关泛型类型的任何内容,而且,他的书中的工厂示例允许创建多个类型对象的实例,使用键字符串作为Factory.Make()中的参数来区分它们.
Gamma表示抽象工厂的意图是"提供一个界面来创建相关或依赖对象的族,而不指定它们的具体类".值得一提的是,Gamma抽象工厂示例违反了Martin所述的接口隔离原则(ISP).ISP和SOLID通常是更现代的原则,或者为了简单而省略.
Gamma和Martin的作品先于Seemann's,所以我认为他应该遵循已经做出的定义.
虽然福勒提出服务定位器作为实现依赖性倒置的一种方式,但Seemann认为它是一种反模式.Gamma或Martin都没有提到服务定位器.
但是,Seemann和Fowler一致认为,服务定位器需要一个配置步骤来注册一个混凝土类的实例,该实例是在请求该类对象时稍后返回的实例.Martin或Gamma在抽象工厂的定义中没有提到这个配置步骤.抽象工厂模式假设每次请求该类对象时都要实例化一个新对象.
结论
Service Locator和Abstract Factory之间的主要区别在于Abstract Factory假设一个新对象被实例化,并在每个请求时返回,并且Service Locator需要配置一个对象实例,并且每次都返回相同的实例.