1. 程式人生 > >面向接口編程(一)

面向接口編程(一)

!= 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()即可,這樣使得後期維護

變得非常簡單,這是面向接口編程的其中一種思想。

面向接口編程(一)