在进入代码之前,来点正规的解释,看设计模式精解里面引用的四人团解释:
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使原本由于接口不兼容而不能一起工作的那些类可以一起工作。

主要意思是:我们需要一种方法,为一个内容合适但接口不匹配的对象创建一个新的接口。

先来个场景,我们就使用设计模式精解里面的场景,现在有一个图形类,此类的行为有:
设定一个Shape对象的位置
获取一个Shape对象的位置
显示一个Shape对象(display)
填充一个Shape对象(fill)
设置一个Shape对象的颜色
擦除一个Shape对象(undisplay)

目前在我的系统里已经实现了点、线、正方形,现在客户要求我们实现一个圆形,当然了,我们会建立一个Circle类来继承Shape,然后需要去实现display、fill、undisplay方法(其它的方法可以统一在抽象类中实现),但是这时我发现同事已经实现了一个画圆的类,但是他的方法名为displayIt、fillIt、undisplayIt,我们不能直接使用这个类,因为那样无法保持多态性,而有时候,我们也不能要求组件类改写方法名。

这时,适配器模式就派上用场了,看代码:
class Circle :Shape{
    private XXCircle pxc;
   
    public Circle(){
        pxc = new Circle();
    }

    public void display(){
        pxc.displayIt();
    }
}
这样,Shape充当了Target,XXCircle作为被适配对象(Adaptee),Circle作为适配对象(Adapter)。

粗看上去,适配器模式与代理模式非常相象,他们都可视为一个对象提供一个前置,但是适配器模式的用意是改变所要考虑对象的接口,而代理模式并不能改变所代理的对象的接口,在这一点上两个模式有明显的区别。
posted on 2009-02-26 21:51  jasonM  阅读(274)  评论(0编辑  收藏  举报