Factory Method
工廠模式(factory pattern)主要是用在當工廠要生產產品時,有不同的產品但是卻有類似的行為與屬性,例如:今天是生產罐頭的工廠,有各式各樣的罐頭要生產,但是他們加工的方法有所不同,像水果、飲料或是畜牧都不一樣。所以工廠模是常用在相同方法宣告,但是有不同的實做方式。在實作工廠方法之前,需要考慮幾點特性: 1.它具有封裝方法且需實作必要性 , 2.工廠模式可以挑選適合的加工方式 。
架構圖:
例子:
今天我們實作一個日誌器(logger),主要呈現工廠如何去分配不同的實作方法,好處1.可以集中管理實例 2.可以利用外部文件去控制文件。以下是我們的UML類別圖,首先為定義產品規格書(logger)的方法規格,再去實作FileLogger和ConsoelLongger實例。利用LoggerFactory來產生多種logger的產品。
Logger.java
public interface Logger{ // method spec public void log(String msg) ; } FileLogger.java |
public class FileLogger implements Logger{ @Override public void log(String msg) { File file = null ; FileWriter write = null ; try { file = new File("D:\\log.txt") ; write = new FileWriter(file); write.write(msg); } catch (Exception e) { }finally{ try { write.close() ; } catch (Exception e2) {} } } |
public class ConsoleLogger implements Logger{ @Override public void log(String msg) { System.out.println(msg); } |
public class LoggerFactory { public boolean isFileLoggingEnabled() { //取得外部設定檔文件 Properties p = new Properties(); try { File file = new File("Logger.properties"); p.load(ClassLoader.getSystemResourceAsStream (file.getName())); String islogfile = p.getProperty("FileLogging"); System.out.println("islogfile:"+islogfile); if(islogfile.equalsIgnoreCase("on")) return true; else return false ; } catch (Exception e) { e.printStackTrace(); return false ; } } //assign instance method public Logger getLogger() { if(isFileLoggingEnabled()) { return new FileLogger(); }else{ return new ConsoleLogger(); } } }
|
留言
張貼留言