了解抽象工厂设计模式

时间:2012-12-19 12:05:39

标签: oop design-patterns

在抽象工厂设计模式中,一个类通过合成将对象实例化的责任委托给另一个对象。

可以通过一些例子解释一下。

1 个答案:

答案 0 :(得分:5)

我会告诉你一个传统的例子。想象一下,你有一个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
    }

}

现在,如果您需要创建组件,可以动态更改Abstract工厂的实现:

public void createUI(AbstractComponentFactory f) {
     Button b = f.createButton();
     Slider s = f.createSlider();
}

//..
createUI(new SilverComponentFactory());

Here是一个示例类图,我希望它不是那么复杂。

相关问题