在抽象工厂设计模式中,一个类通过组合将对象实例化的责任委托给另一个对象。
有人可以用一些例子来解释它。
我会告诉你一个传统的例子。假设你有一个 UI 库。它实现了不同的 UI 组件,如按钮、滑块、单选按钮等。您还希望这些组件具有不同的外观,例如银色、深色、浅色、类似窗口、类似 gtk 等。可以使用抽象类,它为每个组件的创建和子类创建通用的东西,这些子类继承自抽象并仅指定差异:
class AbstractComponentFactory {
public abstract Button createButton() {
//implementation
}
public abstract Slider createSlider() {
//implementation
}
}
class SilverComponentFactory extends AbstractFactory {
public Button createButton() {
Button b = base.createButton();
//customize the button
}
public Slider createSlider() {
Slider b = base.createSlider();
//customize the slider
}
}
class WindowsComponentFactory extends AbstractFactory {
public Button createButton() {
Button b = base.createButton();
//customize the button with windows look-and-feel
}
public Slider createSlider() {
Slider b = base.createSlider();
//customize the slider with windows look-and-feel
}
}
现在,如果您需要创建组件,您可以动态更改抽象工厂的实现:
public void createUI(AbstractComponentFactory f) {
Button b = f.createButton();
Slider s = f.createSlider();
}
//..
createUI(new SilverComponentFactory());
这是一个示例类图,我希望它不是那么复杂。