2012-12-19 213 views

回答

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 
    } 

} 

現在,如果你需要創建的組件,你可以動態改變的實施抽象工廠:

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

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

Here是樣本類圖,我ho它並不那麼複雜。