工廠方法的應用2

下面代碼說的是在一個相同的棋盤上下國際象棋和西洋跳棋,
  interface   Game{...}//game接口
interfacd   GameFactory{...}gamefactory接口

class   Checkers   implements   Game
{.
//game   的實現類
..}
class   CheckersFactory   implements   GameFactory   //gamefactory的實現類
{
public   Game   getGmae()  
{
return   new   Checkers();
}
}
class   Chess   implements   Game
{.
//   game   的實現類
..}  
class   ChessFactory   implements   GameFactory   //gamefactory的實現類

{
public   Game   getGmae()  
{
return   new   Chess();
}
}
public   class   Games
{  
public   static   void   playGame(GameFactory   factory)
  {
  Game   gs=factory.getGame();
}  
public   static   void   main(String   args[])
{
playGame(new   CheckerFactory());
playGame(new   ChessFatory());
}  
}


問題提出:
問題是爲什麼要這麼麻煩,給Checkers和Chess都弄個工廠,然後從工廠裏返回類型,可以直接把public   static   void   playGame(GameFactory   factory)   改成Public   static   void  
playGame(Game   factory)不就可以了嗎?然後playGame(new   CheckerFactory());  
playGame(new   ChessFatory());改成playGame(new   Checkers());   playGame(new   Chess());   利
用向上轉型原理。這樣不是可以把上面的那些Factory代碼全刪掉麼?另外Factory模式到
底有什麼用處。
回答:
就從這個例子來看如上改動是沒有什麼問題,這兩種寫法的本質區別在於對像的產生方式不同,換名話說也就是產品不是統一由工廠生產而是各做各的.第一種寫法(即有工廠類的寫法)對像的產生是通過中間環節工廠類來產生,第二種寫法是直接在終端產生,從而傳遞對像.現在問題在於在很多情況下在產生對像的同時還需要配置一些其它的參數(比如通過讀取XML配置文件中的一些信息)來協同完成.這時如果你用第二種方法就難以實現了.但是用第一種寫法就很容易實現,只要在getGame()方法內在產生對像的同時也讀取信息就可以了.
總結:
在這個例子中其實我們還可以看到接口的作用,對於帶有不同類型參數的函數可以調用同一個方法,當然被調用的方法中的參數就應該是個接口了.這裏面隱含了對像上轉型的理論.接口的使用給我們的程序設計帶來了很大的方便.

下面這段代碼就是一個典型的工廠方法
public   static   Dao   getDao(String   dbmsName)   throws   UnsupportDatabaseException  
{
if(   dbmsName.equalsIgnoreCase( "SQL   Server ")   )
{    return   new   SqlServerDao();
}  
else   if(   dbmsName.equalsIgnoreCase( "Oracle ")   )  
{
    return   new   OracleDao();
  }  
else   if(   dbmsName.equalsIgnoreCase( "MySQL ")   )  
{
    return   new   MySQLDao();
  }  
else   {
    throw   new   UnsupportDatabaseException(dbmsName);
  }
}
其中   Dao   是   SqlServerDao、OracleDao、MySQLDao   的接口,   通過傳入的數據庫名稱來確定,並獲得不同的數據庫處理實現。若使用的數據庫並沒有實現,則進行異常處理。
這也是典型的接口應用. 
 

 

------------

 

工廠模式負責將大量有共同接口的類實例化。工廠模式可以決定將哪一個類實例化,不必事先知道每次要實例化哪一個類。
工廠模式的幾種形態:
簡單工廠模式。又稱靜態工廠模式。
工廠方法模式。Factory   Method,又稱多態工廠或虛擬構造子模式(Virtual   Constructor)。
抽象工廠模式。Abstract   Factory,又稱工具箱(Kit或ToolKit)模式。
工廠模式的逐步遞演反映了抽象的步步加深、解決問題
其實這些問題你可以搜出來,網上很多詳細講解

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章