【发布时间】:2013-07-09 07:17:42
【问题描述】:
抽象工厂和工厂设计模式的区别在于抽象工厂模式使用组合将创建对象的责任委托给另一个类,而工厂设计模式使用继承并依赖派生类或子类来创建对象。
下面是一个典型的抽象工厂例子(http://www.oodesign.com/abstract-factory-pattern.html) 谁能解释一下抽象工厂在哪里使用对象组合?
abstract class AbstractProductA{
public abstract void operationA1();
public abstract void operationA2();
}
class ProductA1 extends AbstractProductA{
ProductA1(String arg){
System.out.println("Hello "+arg);
} // Implement the code here
public void operationA1() { };
public void operationA2() { };
}
class ProductA2 extends AbstractProductA{
ProductA2(String arg){
System.out.println("Hello "+arg);
} // Implement the code here
public void operationA1() { };
public void operationA2() { };
}
abstract class AbstractProductB{
//public abstract void operationB1();
//public abstract void operationB2();
}
class ProductB1 extends AbstractProductB{
ProductB1(String arg){
System.out.println("Hello "+arg);
} // Implement the code here
}
class ProductB2 extends AbstractProductB{
ProductB2(String arg){
System.out.println("Hello "+arg);
} // Implement the code here
}
abstract class AbstractFactory{
abstract AbstractProductA createProductA();
abstract AbstractProductB createProductB();
}
class ConcreteFactory1 extends AbstractFactory{
AbstractProductA createProductA(){
return new ProductA1("ProductA1");
}
AbstractProductB createProductB(){
return new ProductB1("ProductB1");
}
}
class ConcreteFactory2 extends AbstractFactory{
AbstractProductA createProductA(){
return new ProductA2("ProductA2");
}
AbstractProductB createProductB(){
return new ProductB2("ProductB2");
}
}
据我了解,子类的 ConcreteFactory1 和 ConcreteFactory1 正在将对象返回给客户端。它通常作为具有多个产品的工厂类工作。
客户端代码可能在哪里
AbstractFactory factory = new ConcreteFactory2();
AbstractProductA prodA = factory.createProductA();
谁能解释一下抽象工厂中对象组合/委托发生在哪里?
【问题讨论】:
-
以上链接很好地解释了意图的差异。抽象工厂只是具体工厂创建产品系列的接口。它把它留给混凝土工厂来制造产品。这就是代表团的发生方式。但 IMO 委托是不正确的词。
-
Head First Design 模式中提供了一个很好的比萨工厂示例。
-
请注意:组合是根据对其他对象的引用组合一个类的行为。它被称为“有”关系。所以在你的问题的背景下考虑一下......
标签: java oop design-patterns factory abstract-factory