工廠模式與抽象工廠模式

 
工廠模式
  • 什麼時候使用:咱們明確地計劃不一樣條件下建立不一樣實例時主要解決接口選擇的問題。
  • 如何解決定義一個工廠接口,讓工廠類實現工廠接口讓調用者本身經過參數傳遞決定實例化建立哪個工廠類返回的是一個抽象的工廠產品實例
  • 使用場景: 一、日誌記錄器:記錄可能記錄到本地硬盤、系統事件、遠程服務器等,用戶能夠選擇記錄日誌到什麼地方。 二、數據庫訪問,當用戶不知道最後系統採用哪一類數據庫,以及數據庫可能有變化時。 三、設計一個鏈接服務器的框架,須要三個協議,"POP3"、"IMAP"、"HTTP",能夠把這三個做爲產品類,共同實現一個接口。
  • 注意事項:複雜對象適合使用工廠模式,而簡單對象,特別是只須要經過 new 就能夠完成建立的對象,無需使用工廠模式。若是使用工廠模式,就須要引入一個工廠類,會增長系統的複雜度。
 
調用者經過參數傳遞到getShape(String)決定實例化哪個Shape
  1. publicclassShapeFactory{
  2.  
  3.    //使用 getShape 方法獲取形狀類型的對象
  4.    publicShape getShape(String shapeType){
  5.       if(shapeType == null){
  6.          return null;
  7.       }       
  8.       if(shapeType.equalsIgnoreCase("CIRCLE")){
  9.          returnnewCircle();
  10.       }elseif(shapeType.equalsIgnoreCase("RECTANGLE")){
  11.          returnnewRectangle();
  12.       }elseif(shapeType.equalsIgnoreCase("SQUARE")){
  13.          returnnewSquare();
  14.       }
  15.       return null;
  16.    }
  17. }
 
 
 
抽象工廠模式
  • 什麼時候使用:系統的產品有多於一個的產品族,而系統只消費其中某一族的產品;要集成這些產品族主要解決接口選擇的問題。
  • 如何解決:定義一個抽象總工廠,含有不一樣的產品族的生產接口;不一樣產品族工廠經過繼承方式只對本身的生產接口進行工廠生產細節實現(工廠模式)。調用者經過參數傳遞獲取某一的產品族工廠,進而獲取該工廠生產的產品。
  • 優勢:當一個產品族中的多個對象被設計成一塊兒工做時,它能保證客戶端始終只使用同一個產品族中的對象。
  • 缺點:產品族擴展很是困難,要增長一個系列的某一產品,既要在抽象的 Creator 里加代碼,又要在具體的裏面加代碼。
相關文章
相關標籤/搜索