面向接口編程(一)
阿新 • • 發佈:2018-02-12
!= nts tor not output 擴展性 utf 所有 factory
接口體現的是一種實現和規範分離的設計哲學,利用接口可以降低程序各個模塊之間的耦合性,從而提高系統的可擴展性和可維護性。
其中一種模式是簡單工廠模式。
設想一個場景,一臺Computer要有一組輸出設備。一般有兩種解決方案,一種是直接與輸出設備耦合,及直接組合一個Printer,這樣 Computer與Printer之間的耦合非常緊密;另一種是采取松耦合方式,即Computer組合一個Output接口,相當於一個規範,所有的輸出設備都要實現這個規範。
在軟件設計中,如果采用第一種形式,以後如果想要維護或者拓展輸出時,需要修改Computer的源代碼,如果只有一臺Computer還好,如果有很多,那麽這種緊耦合方式會會帶來很大的麻煩,那麽我現在就來就少一下第二種模式,先說一下簡單工廠類。
下面是Computer的簡單源碼
public class Computer { private Output output; /* * 初始化Output */ public Computer(Output output){ this.output = output; } /* * 獲得數據 */ public void getMsg(String msg){ output.getData(msg); } /* * 打印數據*/ public void putMsg(){ output.out(); } }
Output接口
public interface Output { public void getData(String msg); public void out(); }
實現類Printer和AnotherPrinter
public class Printer implements Output{ //存放信息 private String[] printData = new String[10];//記錄引用位數 private int dataNum = 0; //獲得輸入信息 public void getData(String msg) { if(dataNum > 10){ System.out.println("緩存已滿"); }else{ printData[dataNum++] = msg; } } //將輸入信息打印 public void out() { for(int dataIndex = 0;dataIndex<printData.length;dataIndex++){ if(printData[dataIndex] != null) System.out.print(printData[dataIndex]); else break; } } }
public class AnotherPrinter implements Output{ //請讀者自己實現與Printer不同的細節 public void getData(String msg) { } public void out() { } }
Output工廠和測試
public class OutputFactory { //工廠實例化一個輸出設備 public Output getOutput(){ return new Printer(); } //測試 public static void main(String[] args){ OutputFactory of = new OutputFactory(); Computer c = new Computer(of.getOutput()); c.getMsg("hello world "); c.getMsg("你好,世界"); c.putMsg(); } }
這是一個簡單的工廠模式,可以分離Computer和Printer,這是如果要維護和拓展只需要將工廠中的return new Printer()改成return new AnotherPrinter()即可,這樣使得後期維護
變得非常簡單,這是面向接口編程的其中一種思想。
面向接口編程(一)