2014年4月30日 星期三

[OO 設計模式] Simple Factory Pattern : 透過靜態方法來產生物件

轉載自 這裡 
前言 : 
Simple Factory模式又稱Static Factory模式。一個Simple Factory生產成品,而對客戶端隱藏產品產生的細節,物件如何生成,生成前是否與其它物件建立依賴關係,客戶端皆不用理會,用以將物件生成方式之變化 與客戶端程式碼隔離. 

Simple Factory 模式 : 
假設今天,您要建立一個 Message 物件,這個 Message 物件會有一連串的物件實例化與依賴關係建立流程 : 
  1. Session session = someWhere.getSession();  
  2. Message msg = new MimeMessage(session);  
  3. msg.setFrom(new InternetAddress(session.from));  
  4. msg.setSubject(session.subject);  
  5. msg.setText(session.text);  
  6. msg.setHeader(session.headerName, session.headerValue);  
  7. msg.setDate(session.date);  
  8. ...  
  9. mailService.send(msg);  
若這樣的流程是固定的,您可以將以上的細節封裝在一個類別中成為其靜態方法 : 
  1. public class MessageFactory {  
  2.     public static Message getMessage(Session session) {  
  3.         Message msg = new MimeMessage(session);  
  4.         msg.setFrom(new InternetAddress(session.from));  
  5.         msg.setSubject(session.subject);  
  6.         msg.setText(session.text);  
  7.                 msg.setHeader(session.headerName, session.headerValue);  
  8.         msg.setDate(session.date);  
  9.         ...  
  10.         return msg;  
  11.     }   
  12. }  
對使用 MessageFactory 的客戶端,可以這麼取得 Message 實例,而不用理會物件實例化與依賴關係建立的細節 : 
  1. Session session = someWhere.getSession();  
  2. Message message = MessageFactory.getMessage(session);  
  3. mailService.send(message);  
Simple Factory 的類別圖如下所示 : 
 
UML 類別圖中,傳回型態 Product 意指的是具有 Product 所定義之公開協定(物件上的公開方法)的物件,而不是專指 Java 中的 interface 定義. 
Simple Factory 使用靜態方法來簡單地隱藏物件建立細節。撇開靜態方法不談,隱藏物件建立的細節仍是 Factory 模式的重點,可將這個模式推至極緻,而成為一種通用、專門用來生成物件、建立依賴關係、甚至具備管理物件生命週期職責的輕量級容器. 

沒有留言:

張貼留言

[Git 常見問題] error: The following untracked working tree files would be overwritten by merge

  Source From  Here 方案1: // x -----删除忽略文件已经对 git 来说不识别的文件 // d -----删除未被添加到 git 的路径中的文件 // f -----强制运行 #   git clean -d -fx 方案2: 今天在服务器上  gi...