面向接口编程的思想

来自CloudWiki
跳转至: 导航搜索

接口思想在生活中的应用很普遍。比如自来水公司要收水费,电力公司要收电费,在他们的营业厅里都有收费窗口。这些窗口就是接口,用来描述一套完整的服务规范,比如查询应交费用、缴费明细、收费、提供发票等。现在银行服务窗口实现了水费、电费代收服务。也就是说银行实现了收水费接口、收电费接口。但银行既不是自来水公司,也不是电力公司,所以接口和继承不同,接口更多的是一种服务规范、服务实现的概念。

面向接口编程的步骤:接口体现了规范与分离的设计原则,可以很好地降低程序各模块之间的耦合度,提高系统的可扩展性,可维护性。开发系统时,主体构架使用接口来构成系统的骨架,这样就可以通过更换接口的实现类来更换系统的实现。这就是面向接口编程的思想。

【实例5-12】有一打印中心,既有黑白打印机,也有彩色打印机,在打印时,使用不同的打印机,打印也就不同。采用面向接口编程的思想编程。

1. 抽象出Java接口

分析:黑白、彩色打印机都存在一个共同的方法特征:print;黑白、彩色打印机对print方法有各自不同的实现。

结论:抽象出Java接口PrinterFace,在其中定义方法print。

具体实现:

public interface PrinterFace {   //打印机接口
	    public void print(String content);
}
public interface Printer {  //打印社的打印接口
	    public String detail();
}

2. 实现Java接口

分析:已经抽象出Java接口PrinterFace,并在其中定义了print方法黑白、彩色打印机对print方法有各自不同的实现。

结论:黑白、彩色打印机都实现PrinterFace接口,各自实现print方法。

具体实现:

public class BlackPrinter implements PrinterFace {
	    public void print(String content) {
	    	    System.out.println("黑白打印:");
	    	    System.out.println(content);
	    }
}
public class ColorPrinter implements PrinterFace{
	    public void print(String content) {
		    System.out.println("彩色打印:");
		    System.out.println(content);
}
}

3. 使用Java接口

分析:主体构架使用接口, 让接口构成系统的骨架。

结论:更换实现接口的类就可以更换系统的实现。

具体实现:

public class PrinterCentre implements Printer {
    private PrinterFace printerface;  //打印机接口
    public void setPrinter(PrinterFace pf) {
        this. printerface = pf;
    }
    public String detail() {
        return "这里是打印中心";
    }
    public void printph(Printer pf){
        printerface.print(pf.detail()); // printerface接口打印Printer接口信息
    }
}
public class Main {
	public static void main(String[] args) {
		    PrinterCentre pc=new PrinterCentre();//创建打印中心
		    pc.setPrinter(new BlackPrinter());//配备黑色打印机
		    pc.printph(pc);//打印
		    pc.setPrinter(new ColorPrinter());//配备彩色打印机
		    pc.printph(pc);//打印
	    }
}

程序运行结果如下:

黑白打印:

这里是打印中心

彩色打印:

这里是打印中心

接口中常量的使用:常量是一种标识符,它的值在运行期间恒定不变。常量标识符在程序中只能被引用,而不能被重新赋值。在Java 接口中声明的变量在编译时会自动加上static final的修饰符,即声明为常量,因而Java接口通常是存放常量的最佳地点。

下面通过代码来演示接口里的常量。

【实例5-13】接口中的常量程序设计。

interface Cons { // 定义接口
	    final String name = "this is my name";
}
class Const implements Cons {
}
public class TestInterfaceConst {
public static void main(String[] s) {
		    Const cons = new Const();
		    String name = Cons.name;
		    System.out.println(name);
		    String n = cons.name;
		    System.out.println(n);
	    }
}

程序运行结果如下:

this is my name
this is my name

从上面实例中可以看出,接口内定义的所有属性都是public static的。方法都是public abstract的。

返回 Java程序设计