抽象工厂和工厂设计模式的区别在于抽象工厂模式使用组合将创建对象的责任委托给另一个类,而工厂设计模式使用继承并依赖派生类或子类来创建对象。
下面是一个抽象工厂的典型示例(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();
有人可以解释一下抽象工厂中对象组合/委托发生在哪里吗?