2012-12-19 48 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它并不那么复杂。