`
hcjdiy
  • 浏览: 5616 次
  • 性别: Icon_minigender_1
  • 来自: 南昌
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

抽象类与接口的应用(三)

阅读更多

设计模式-->代理设计

范例:代理操作

interface Network{                             //定义Network接口

       public void browse();                   //定义浏览的抽象方法

}

class Real implements Network{          //真实的上网操作

       public void browse(){                  //覆写抽象方法

              System.out.println("上网浏览信息");

       }

}

class Proxy implements Network{              //代理上网

       private Network network;

       public Proxy(Network network){  //设置代理的真实操作

              this.network = network;        //设置代理的子类

       }

       public void check(){                    //与具体上网相关的操作

              System.out.println("检查用户是否合法");

       }

       public void browse(){

              this.check();                        //可以同时调用多个与具体业务相关的操作

              this.network.browse();         //调用真实的上网操作

       }

}

public class ProxyDemo{

       public static void main(String args[]){

              Network net = null;                     //定义接口对象

              net = new Proxy(new Real()); //实例化代理,同时传入代理的真实操作

              net.browse();                       //客户只关心上网浏览一个功能

              }

}

设置模式-->适配器设计

范例:适配器设计实现

interface Window{                      //定义Window接口,表示窗口操作

       public void open();               //窗口打开

       public void close();        //窗口关闭

       public void activated();   //窗口活动

       public void iconified();   //窗口最小化

       public void deiconified();       //窗口恢复大小

}

//定义抽象类实现接口,在此类中覆写方法,但是所有的方法体为空

abstract class WindowAdapter implements Window{

       public void open(){}                    //覆写open()方法,方法体为空

       public void close(){}                   //覆写close()方法,方法体为空

       public void activated(){}              //覆写activated()方法,方法体为空

       public void iconified(){}        //覆写iconified()方法,方法体为空

       public void deiconified(){}           //覆写deiconified()方法,方法体为空

}

//子类直接继承WindowAdapter类,有选择地实现需要的方法

class WindowImpl extends WindowAdapter{

       public void open(){                      //真正实现open()方法

              System.out.println("窗口打开");  

       }

       public void close(){                     //真正实现close()方法

              System.out.println("窗口关闭");

       }

}

public class AdapterDemo{

       public static void main(String args[]){

              Window win = new WindowImpl();     //实现接口对象

              win.open();                                        //调用open()方法

              win.close();                                //调用close()方法

       }

}

 

//适配器设计

内部类的扩展

范例:在一个抽象类中包含接口

abstract class A{                         //定义抽象A

       public abstract void printA();        //定义抽象方法

       interface B{                                       //定义内部接口

              public void printB();                     //定义抽象方法

       }

}

class X extends A{                                    //继承抽象类

       public void printA(){                           //实现抽象方法

              System.out.println("Hello --> A");

       }

       class Y implements B{                        //定义内部类实现内部接口

              public void printB(){                    //实现内部接口的抽象方法

                     System.out.println("Hello -->B");

              }

       }

}

public class InnerExtDemo01{

       public static void main(String args[]){

              A.B b = new X().new Y();            //实例化内部接口对象

              b.printB();                                         //调用内部接口的抽象方法

       }

}

范例:在一个接口中包含抽象类

interface A{                         //定义接口A

       public abstract void printA();        //定义抽象方法

       abstract class B{                                       //定义内部抽象类

              public      abstract void printB();                  //定义抽象方法

       }

}

class X implements A{                                      //实现接口的抽象类

       public void printA(){                           //实现抽象方法

              System.out.println("Hello --> A");

       }

       class Y extends       B{                        //在接口实现类中接口

              public void printB(){                    //实现内部接口的抽象方法

                     System.out.println("Hello -->B");

              }

       }

}

public class InnerExtDemo02{

       public static void main(String args[]){

              A.B b = new X().new Y();            //实例化内部接口对象

              b.printB();                                         //调用内部接口的抽象方法

       }

}

抽象类与接口之间的关系

序号

区别点

抽象类

接口

1

定义

包含一个抽象方法的类

抽象方法和全局常量的集合

2

组成

构造方法、抽象方法、普通方法、常量、变量

常量、抽象方法

3

使用

子类继承抽象类(extends)

子类实现接口 (implements)

4

关系

抽象类可以实现多个接口

接口不能继承抽象类,但允许继承多个接口

5

常见设计模式

模板设计

工厂设计、代理设计

6

对象

都通过对象的多态性产生实例化对象

7

局限

抽象类有单继承的局限

接口没有此局限

8

实际

作为一个模板

作为一个标准或表示一种能力

9

选择

如果抽象类和接口都可以使用,则优先使用接口,避免单继承的局限

10

特殊

一个抽象类中可以包含多个接口,一个接口中可以包含多个抽象类

 

总结:

1、  抽象类和接口的实例化:通过对象多态性

2、  抽象类表示一个模板,接口制定的是一个标准

3、  常见的设计模式:模板设计,工厂设计、代理设计,适配器设计

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics