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,两者语法并不是一对一的关系,视实际需求还可以变化 一下。
相关推荐
Adapter模式是一种设计模式,主要目的是解决不同接口之间不兼容的问题,使得原本无法协同工作的类能够协同工作。在本文中,我们通过一个形如"形状"的范例来讲解Adapter模式的概念和实现。 首先,我们有一个抽象基类...
稳定,解决class com.alibaba.druid.pool.DruidDataSource cannot be cast to class com.alibaba.druid.pool.DruidDataSource 报错问题
在本文中,我们将深入探讨如何在...通过理解和正确配置`laravel-storage-cloudinary-adapter-service-provider`,你可以充分利用Cloudinary的强大功能,如自动优化、转换和分发媒体资源,提升应用的性能和用户体验。
Adapter模式是一种软件设计模式,它允许不兼容的接口之间进行通信。在Java或者其他面向对象语言中,Adapter模式常被用来解决新旧系统对接、不同组件间的接口不匹配等问题。通过Adapter,我们可以让原本无法协作的...
适配器模式是一种软件设计模式,它允许两个不兼容的接口之间进行通信。在Java编程中,这种模式常用于解决新旧系统之间的对接问题,或者是引入第三方库时接口不匹配的情况。适配器模式的核心思想是创建一个新的类...
adapter.withItem(MyItem.class); ``` 4. **绑定数据**:通过FastAdapter的add()或addAll()方法将数据绑定到Adapter中。 ```java List<MyItem> items = ...; adapter.addAll(items); ``` 5. **事件监听**:...
'adapter' => Client::class, ]); // 发送POST请求 $response = $httpClient->post('http://example.com/api/endpoint', [ 'headers' => ['Content-Type' => 'application/json'], 'json' => ['key' => 'value']...
适配器模式(Adapter Pattern)是一种结构型设计模式,它允许不兼容的接口之间进行通信。这种模式可以在不修改现有代码的情况下重用现有类,并且可以使不兼容的接口之间进行通信。 适配器模式的定义 适配器模式是...
-- Adapter -- Bridge -- Composite -- Decorator - Done -- Facade -- Flyweight -- Private Class Data -- Proxy 行为设计模式 -- Chain of Responsibility -- Command -- Interpreter -- Iterator -- Mediator ...
例如,接口(Interface)和抽象类(Abstract Class)在实现多态性和封装性方面起到了关键作用,而委托(Delegate)和事件(Event)则支持了观察者模式,Lambda表达式简化了策略模式的实现,匿名方法和闭包则与迭代器...
public class Adapter implements Target { private Adaptee adaptee; public Adapter(Adaptee adaptee) { this.adaptee = adaptee; } @Override public void request() { adaptee.specificRequest(); } }...
“适配器”(Adapter)模式则用于使两个不兼容的接口能够协同工作。在Java中,通过实现或继承来创建适配器类,将旧接口转换为新接口,使得旧的代码可以在新的系统中正常使用。例如,如果你有一个使用特定API的库,但...
$adapter->execute(); ``` 通过这种方式,适配器模式帮助我们解决了接口不兼容的问题,同时保持了代码的整洁和模块化。它允许我们在不改变原有组件的情况下,灵活地扩展和集成新的功能,提升了代码的可重用性和可...
适配器可以作为类结构(Class Adapter)或对象结构(Object Adapter)实现。 1. 类结构适配器:适配器作为一个基类,继承自原始接口,并实现目标接口。这种情况下,适配器类和适配对象之间存在继承关系。 2. 对象...
public class Adapter extends Adaptee implements Target { @Override public void method2() { super.method1(); } } ``` 对象适配器模式则通过组合来实现适配,它创建一个包含Adaptee对象的新类,该类实现了...
Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 - **应用场景**:系统需要使用现有的类,而这些类的接口不符合系统的需求;或者需要复用现有类的功能,但是接口不匹配。 - **优点**:提高...
适配器模式(Adapter Pattern)是一种结构型设计模式,它能将两个不兼容的接口连接在一起,使得原本由于接口不匹配而无法一起工作的类能够协同工作。在IT行业中,适配器模式广泛应用在系统集成、组件重用以及解决...