-1

抽象ファクトリ設計パターンでは、クラスは、合成を介してオブジェクトのインスタンス化の責任を別のオブジェクトに委任します。

誰かがいくつかの例でそれを説明できますか?

4

1 に答える 1

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());

これがクラス図のサンプルです。それほど複雑でないことを願っています

于 2012-12-19T12:19:10.973 に答える