首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

Adapter适配器模式-java设计形式6(结构型模式)

2012-11-04 
Adapter适配器模式-java设计模式6(结构型模式)Adapter适配器模式:编写能够和不同接口的类进行通信,为调用

Adapter适配器模式-java设计模式6(结构型模式)

Adapter适配器模式:编写能够和不同接口的类进行通信,为调用类提供统一适配器接口的类(也可以是只简单实现了接口的类如:API中各种事件Adapter)。可能要求此构造类为不同调用类裁剪出不同的构造方法。

实现这种要求有两种方法:1.继承。2.对象组合。

一:继承实现适配器,从一个非一致的类派生一个新类,并增加新的方法使派生类与所需接口匹配。

示例:编写一个在两个列表间add(),remove数据项的小程序。在Java API中javax.swing.JList没有add(),getSelectedItems(),remove()方法,但是在java.awt.List中有这样的方法。要构造一个支持上述两个类功能的适配器,以供调用适配器的类使用,当然想到继承方法;但是因为java中不支持多重继承,所以定义一个需要List的方法的接口,然后继承类JList即可,此时要在这样的适配器类中重写需要的List类的方法。下面是实现的UML类图:

Adapter适配器模式-java设计形式6(结构型模式)

List里面的方法被声明到了AwtList中,其中JTwoClassList为应用类,调用了JClassAwtList类(适配器类),这样就可以让JTwoClassList类能够使用JList里面的方法,也可以调用AwtList接口的方法;从而将JClassAwtList看作一个适配器类。随便说明一下,为了实现多继承,除了内部类或接口定义,还有一种很常用且强大的解决方法:可以创建一个类来继承(extends)某个类并且实现(implements)另一个类的方法.如上图中的JClassAwtList.

?

二、对象适配器,在新类中包含最初的类,并创建方法来解释新类中的调用。下面是创建一个包含了JList类和List类的适配器JawtList类。UML类图如下:

Adapter适配器模式-java设计形式6(结构型模式)

两种方式的区别:

?1.类适配器

? (1)当想要适配一个类及其全部子类时不起作用,这是因为在创建该类时要定义派生它的类。

(2)允许适配器改变被适配类的一些方法,不过仍允许其他方法不做改动即可使用。

2.对象适配器

(1)只有将子类作为构造函数的部分传入(组合),则可使其得到适配。

(2)要求将所有要置为可用的任何被适配对象的方法予以公开(以供使用类使用)。

?

扩展:1.双向适配器,双向适配器是一个很有技巧的概念,它允许一个对象被不同的类视作AwtList类或者JList类,可以通过上面的类适配器实现。因为AwtList类和JList类没有任何共同的方法,非常适合,可以同样方便地引用AwtList或JList中的方法,并把该对象处理为其中的一个实例。

2.插件适配器,插件适配器可以动态地适配多个类中的一个,当然只能适配到它可以识别的类,当然也可以用java中提供的反射(reflection)查找适配类的公共的方法名和参数。如:

addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});

?

?


热点排行