Design Pattern: Adapter 模式 - Class Adapter

简介:

Adapter模式的另一种作法是Class Adapter模式,在这个模式下,Adapter直接继承Adaptee(要引进的新类别),以拥有当中的成员及方法,在C++中的话可以这么作:


C++中可以多重继承,但在Java中不行,所以在Java中若要采用Class Adapter,必须作点修改,一方面继承Adaptee,一方面实作Target的介面:


代码的实现是这样的:

public class Adapter extends Adaptee implements Target { 
    // .... 
}

当然,这必须您原先的Target定义了共同的介面,所以Class Adapter在Java中适用的场合较少,事实上,也比较建议使用Object Adapter,这样的Adapter模式比较有弹性,例如,您可以在Adapter上加上个setter,以随时可以抽换Adaptee。 
在Java中,Class Adapter的一个应用场合是达到多重继承的效果,您一定在很多时候听别人说,介面(interface)可以达到多重继承的效果,这是怎么回事? 
其实要讨论这个问题,首先您对于C++中多重继承要先有认识,新手看了书说介面可以达到多重继承,切莫人云亦云,尤其是没有学过C++的新手们,如果您对 于C++多重继承想要有所认识,请先看看 多 重继承(一)与 多 重继承(二)。 
Java不能多重继承,但为何说Java中可以使用介面(interface)来达到多重继承的效果,首先效果之一,就如 多 重继承(二) 中描述的“ 多重继承时通常其中一个基底类别作为private实作体,而其它的用以表现完全的抽象介面。”,在Java中这个效果可以使用介面来达到,介面此时所扮 演的即 多 重继承(二) 中的抽象类别,一个完全的抽象介面,这个效果的达成方式,如 介 面(interface)型态 中所介绍的,您可以直接对应这两个主题中的程式实作来了解,了解Java中如何使用介面(interface)来达到C++中所谓多重继承的“一种”效 果。 
来看看另一个情况。 
如果有SomeClass类别与OtherClass类别,您想要SomeAndOther类别可以同时拥有SomeClass类别与 OtherClass类别中已定义好的操作,并可以进行多型操作,在C++中可以用多重继承来达到,但在Java中显然的无法使用多重继承,怎么办?您可 以在设计上先绕个弯,先使用两个介面分别定义好SomeClass与OtherClass两个类别的公开方法,例如:

public interface ISome {
    public void doSome();
}

public interface IOther {
    public void doOther();
}

接着让SomeClass与OtherClass分别实作两个介面:

public class SomeClass implements ISome {
    public void doSome() {
        ....
    }
}

public class OtherClass implements IOther {
    public void doOther() {
        ....
    }
}

SomeAndOther如何同时拥有两个SomeClass与OtherClass类别已定义好的操作?并可以多型操作?SomeAndOther可以 继承其中之一,并拥有其中之一,例如:

public class SomeAndOther extends SomeClass implements IOther {
    private IOther other = new OtherClass();

    public void doOther() {
        other.doOther();
    }
}

虽不满意,但至少解决了目前的问题,当然这边只是其中一例,毕竟C++是C++,Java是Java,两者语法并不是一对一的关系,视实际需求还可以变化 一下。

目录
相关文章
|
7月前
适配器模式(Adapter Pattern)
适配器模式(Adapter Pattern)
|
设计模式 Java 程序员
适配器模式(Adapter Pattern)
适配器模式是一种结构型设计模式, 它能将接口转换为客户期望的另一个接口,也就是说它能使接口不兼容的对象能够相互合作。
129 0
适配器模式(Adapter Pattern)
|
缓存
ViewPager源码分析(3):与PagerAdapter 交互
ViewPager源码分析(3):与PagerAdapter 交互
ViewPager源码分析(3):与PagerAdapter 交互
|
Java C#
使用C# (.NET Core) 实现适配器模式 (Adapter Pattern) 和外观模式 (Facade Pattern)
本文的概念内容来自深入浅出设计模式一书 现实世界中的适配器(模式) 我带着一个国标插头的笔记本电脑, 来到欧洲, 想插入到欧洲标准的墙壁插座里面, 就需要用中间这个电源适配器. 面向对象的适配器 你有个老系统, 现在来了个新供应商的类, 但是它们的接口不同, 如何使用这个新供应商的类呢? 首先, 我们不想修改现有代码, 你也不能修改供应商的代码.
1765 0