Posted on 2007-11-29 17:41
flustar 閱讀(1706)
評論(0) 編輯 收藏 所屬分類:
Design Patterns
《設計模式》一書對Factory Method模式是這樣描述的:
定義一個用于創建對象的接口,讓子類決定實例化哪一個類。FactoryMethod使一個類的實例化延遲到其子類。
我的理解:FatoryMethod模式是一種創建型模式,定義一個用于創建對象的接口的意思是說,我們要定義一個用于創建對象的接口(或者說抽象類,實際上就是個抽象工廠abstractFactory),它的內部有一個創建對象的方法,這個方法的返回值是一個接口(或者抽象類)的類型,這個方法就是FactoryMethod;讓子類決定實例化哪一個類意思是說我們要定義一個實現了該創建對象的接口(或者抽象類)的子類(具體的工廠類concreteFactory),讓子類決定要創建對象的具體類型的實例(實現FactoryMethod)。下面給出一個例子,代碼如下:
abstract class BallFactory{
protected abstract Ball makeBall(); //Factory Method
}
class BasketballFact extends BallFactory{
public Ball makeBall(){ //子類實現Factory Method決定實例化哪一個類的
return new Basketball();
}
}
class FootballFact extends BallFactory{
public Ball makeBall(){ //子類實現Factory Method決定實例化哪一個類的
return new Football();
}
}
class Basketball extends Ball{
public void play(){
System.out.println("play the basketball");
}
}
class Football extends Ball{
public void play(){
System.out.println("play the football");
}
}
abstract class Ball{
protected abstract void play();
}
class test{
public static void main(String[] args){
BallFactory ballFactory=new BasketballFact();
Ball basketball=ballFactory.makeBall();
basketball.play();
ballFactory=new FootballFact();
Ball football=ballFactory.makeBall();
football.play();
}
}
輸出如下:
play the basketball
play the football
這個模式我在abstract Factory模式中已經使用過了,只是那時候還不知道有Factory Method這個模式,在我舉例中的ResFactory類的getDisplayDrvr()和getPrintDrvr()實際上就是工廠方法。具體參見《設計模式學習筆記(五)—Abstract Factory抽象工廠模式》。
小結:Factory Method模式是一個非常常用的模式。它主要適用于:
1) 當一個類不知道它所必須創建的對象的類的時候。
2) 當一個類希望由它的子類來指定它所創建的對象的時候。
3) 當類將創建對象的職責委托給多個幫助子類中的某一個,來完成這個創建對象的任務。