面向接口编程(一)

  接口体现的是一种实现和规范分离的设计哲学,利用接口可以降低程序各个模块之间的耦合性,从而提高系统的可扩展性和可维护性。

  其中一种模式是简单工厂模式。

  设想一个场景,一台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()即可,这样使得后期维护

变得非常简单,这是面向接口编程的其中一种思想。

posted @ 2018-02-11 22:00  Shevo  阅读(390)  评论(0编辑  收藏  举报