tas*_*oor 9 static design-patterns factory factory-pattern abstract-factory
我已经看到了使用静态方法的Factory实现.像这样的东西:
public class MyFactory {
public static Product1 createProduct1() {}
public static Product2 createProduct2() {}
}
p1 = MyFactory.createProduct1();
p2 = MyFactory.createProduct2();
Run Code Online (Sandbox Code Playgroud)
我不确定我是否可以将其称为抽象工厂,但这不是问题.我对抽象工厂的理解是,它为我们提供了轻松更改产品系列的灵活性.
Factory factory = new MyFactory(); // might be a global or Singleton
p1 = factory.createProduct1();
p2 = factory.createProduct2();
Run Code Online (Sandbox Code Playgroud)
如果我想改变MyFactory,YourFactory那么只需要改变一行.我也可以在运行时更改它.但它们是否可以作为静态方法实现?我需要将所有调用更改为静态工厂.如果我们想在运行时决定,还需要在每个地方使用if-else检查.
p1 = YourFactory.createProduct1();
p2 = YourFactory.createProduct2();
Run Code Online (Sandbox Code Playgroud)
那么使用静态方法实现工厂的好处是什么?我们不是失去了主要的灵活性吗?我错过了什么?
请注意,不承担任何特定语言.任何帮助表示赞赏.
Mik*_*nty 11
使用这样的静态方法,您可以获得一些代码重用,但这是关于优势的程度.它基本上将oo模式简化为程序范式.您错过的最重要的事情是根据上下文在运行时更改您的实现.
单身人士稍微好一些.它使您能够使用成员变量(状态)正常编写逻辑,然后进行一些调整以将其转换为单例.假设您在工厂中正在进行一些实例池化,单例可能非常适合.你仍然会错过上下文.
最灵活的模式是使用依赖性反转,这意味着您的类依赖于工厂抽象,并且不知道或不关心它是否是单例.这使您可以在供应混凝土工厂时考虑上下文.