面向接口编程的思想
接口思想在生活中的应用很普遍。比如自来水公司要收水费,电力公司要收电费,在他们的营业厅里都有收费窗口。这些窗口就是接口,用来描述一套完整的服务规范,比如查询应交费用、缴费明细、收费、提供发票等。现在银行服务窗口实现了水费、电费代收服务。也就是说银行实现了收水费接口、收电费接口。但银行既不是自来水公司,也不是电力公司,所以接口和继承不同,接口更多的是一种服务规范、服务实现的概念。
面向接口编程的步骤:接口体现了规范与分离的设计原则,可以很好地降低程序各模块之间的耦合度,提高系统的可扩展性,可维护性。开发系统时,主体构架使用接口来构成系统的骨架,这样就可以通过更换接口的实现类来更换系统的实现。这就是面向接口编程的思想。
【实例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程序设计