java接口的应用(第29集)

来源:互联网 发布:车工钳工 知乎 编辑:程序博客网 时间:2024/05/18 02:12

以下内容来自marschen的java4android视频教程

本集主要内容
1.为什么要使用接口。
2.工厂方法模式。

接口其实定义了一种标准。
实现接口。

实例1 如下. 

       一个printer接口, 一个HPPrinter类, 一个CanonPrinter类.还有一个Test类.


//Printer 接口interface Printer{public void open();public void close();public void print(String s);}


//HPPrinter 类class HPPrinter implements Printer{public void open(){System.out.println("HP open");}public void close(){System.out.println("HP close");}public void print(String s){System.out.println("HP print--->"+s );}}

//CanonPrinter 类class CanonPrinter implements Printer{private void clean(){System.out.println("Canon Priter clean");}public void close(){this.clean();System.out.println("Canon close");}public void open(){System.out.println("Canon open");}public void print(String s ){System.out.println("Canon Print--->"+s);}}


class Test{public static void main(String args[]){//根据用户的选择,生成相应的打印机对象 //并且向上转型为Printer类型。//Printer getPrinter(int flag);Printer printer = null;int flag = 1;if(flag == 0){printer = new HPPrinter();//向上转型}else if(flag ==1){printer = new CanonPrinter();//向上转型}printer.open();printer.print("test");printer.close();}}


上面的程序还有很多问题,在Test 类,生成对象的代码重复出现.


下面用


简单静态工厂方法模式.
            Printer     
        |                 |                                        PrinterFactory
HPPrinter    CanonPrinter      


再改动一下上面的代码.


增加一个PrinterFactory类

class PrinterFactory{public static Printer getPrinter(int flag){Printer printer = null;if(flag == 0){printer = new HPPrinter();//向上转型}else if(flag ==1){printer = new CanonPrinter();//向上转型}else if(flag ==2){printer = new XXXPrinter();//向上转型}return printer;}}

在Test类,这样做.

class Test{public static void main(String args[]){//根据用户的选择,生成相应的打印机对象 //并且向上转型为Printer类型。int flag = 2;Printer printer = PrinterFactory.getPrinter(flag);printer.open();printer.print("test");printer.close();}}


所以以再增加打印机.只需要增加一个打印机.如添加XXXPrinter打印机.

//XXXPrinter 类class XXXPrinter implements Printer{public void open(){System.out.println("XXX open");}public void close(){System.out.println("XXX close"); }public void print(String s){System.out.println("XXX print--->"+s );}

在PrinterFactory里面添加.

else if(flag ==2){printer = new XXXPrinter();//向上转型}

无需对打印机的调用代码进行修改...






原创粉丝点击