在抽象工厂中,您声明一个负责创建对象的类型。
这将防止像这样要求开关:
if( type == ONE ) {
doOne();
} else if( type == TWO ) {
doTwo();
} etc.
或相同:
switch( type ) {
case ONE: doOne(); break;
case TWO: doTwo(); break;
etc....
}
进入这个:
MyAbstractFactory factoryInstance = ... ?
SomeObject object = factoryInstance.createObject();
object.doX();
据我了解, AbstractFactory 将创建正确的对象,而该对象又将以多态方式执行正确的行为。
然后,如果您在程序中使用该对象 10-20 或 100 次,则不必每次都重复切换。您只需执行相应的方法并让多态性完成这项工作。
object.doY();
object.doZ();
添加新类型就像创建新的混凝土工厂一样简单。
这一切我都很清楚。但...
混凝土工厂最初是在哪里或如何创建的(一般而言)?
我一直使用一个单点(通常在 main() 方法或 Configuration.init() 方法中),这又具有 if/else|switch 结构,这是不可避免的,但至少它只使用一次。
但是,我是“本能地”(或根据常识)这样做的,但从未读过任何描述应在何处创建该模式的文档。
:)