首页 > 代码库 > 接口的应用

接口的应用

1. 为什么要用接口

2. 工厂方法模式

 

1. 为什么要用接口

    之前的打印机程序, open、close、print对于惠普、佳能实际上应该都是不同的,

    不同的打印机, 开机、关机、打印都应该不同

    所以更靠谱的是将Printer定义为interface类型

1 interface Printer{
2     void Open();    
3     void Close();    
4     void Print(String s);
5 }
 1 class HPPrinter implements Printer{
 2     public void Open(){         //少写public报错 
 3                                              //自己的理解父类是public, 
 4                                              //复写时必须权限大于public
 5         System.out.println("HP Open");
 6     }    
 7     public void Close(){
 8         System.out.println("HP Close");
 9     }    
10     public void Print(String s){
11         System.out.println("HP Print--->" + s );
12     }
13 }
 1 class CannonPrinter implements Printer{
 2     private void Clean(){
 3         System.out.println("Cannon Clean");
 4     }
 5     
 6     public void Close(){
 7         this.Clean();
 8         System.out.println("Cannon Close");
 9     }
10     
11     public void Open(){
12         System.out.println("Cannon Open");
13     }
14     
15     public void Print(String s){
16         System.out.println("Cannon Print--->" + s );
17     }
18 }
 1 class Test{
 2     public static void main(String args []){
 3         Printer printer = null ;        
 4         int flag = 0;        
 5         if( flag == 0){
 6             printer = new HPPrinter();
 7         }
 8         else if( flag == 1){
 9             printer = new CannonPrinter();
10         }
11         printer.Open();
12         printer.Print("123");
13         printer.Close();
14     }
15 }

      有100个功能需要使用打印机打印功能, 那就需要Test文件中100个else么? 必然不是

 

2. 工厂方法模式

      减少重复代码, 是将重复代码放在一个地方, 需要使用则调用

      修改Test.java, 新增 PrinterFactoy.java

 1 class Test{
 2     public static void main(String args []){
 3         int flag = 1 ;
 4         Printer printer = PrinterFactory.getPrinter(flag); 
 5                     
 6         printer.Open();
 7         printer.Print("123");
 8         printer.Close();
 9     }
10 }
 1 class PriterFactory(){
 2     public static Printer getPrinter(int flag){   //static便于调用
 3                                                   //返回值类型是Printer
 4                                                   //函数名是getPrinter
 5         Printer printer = null ;                
 6         if( flag == 0){
 7             printer = new HPPrinter();
 8         }
 9         else if( flag == 1){
10             printer = new CannonPrinter();
11         }
12         return printer;
13     } 
14 }

          上面的思路就是 著名的工厂方法模式

                

          增删打印机  的过程      

          使用者Test.java不需要修改      修改我们的工厂模式代码, 将需要new的在PrinterFactory里面修改