Adapter模式使原本由于接口不兼容而不能在一起工作的类可以一起工作,即为一个内容合适但接口不匹配的对象创建一个新的接口.Adapter模式让现存的对象适应新的类结构,而不受他们的接口限制.
例如现在,我们有一个球袋类BasketballBag负责完成装入篮球。
Java代码
- public class BasketballBag{
- public void putBasketball(){
- System.out.println("Put in BasketBall....");
- }
- }
public class BasketballBag{ public void putBasketball(){ System.out.println("Put in BasketBall...."); }}
有一个专门负责装入操作的类的方法putBalls()来调用BasketballBag类中方法来放入篮球。
Java代码
- public class PutBall{
- public void putBalls(BasketballBag bb){
- bb.putBasketball();
- }
- }
public class PutBall{ public void putBalls(BasketballBag bb){ bb.putBasketball(); }}
此时我们有一个足球类FootballBag负责装入完成装入足球。
Java代码
- public class FootballBag{
- public void putFootball(){
- System.out.println("Put in FootBall....");
- }
- }
public class FootballBag{ public void putFootball(){ System.out.println("Put in FootBall...."); }}
前面提到的类中的方法putBalls()用来调用BaskballBag中的方法来放入篮球,我们能不能使用同一个方法来放入足球呢?我们试一试
Java代码
- public class Main {
- public static void main(String[] args){
- PutBall pb = new PutBall();
-
- System.out.println("BasketBall");
- BasketballBag bb = new BasketballBag();
- pb.putBalls(bb);
-
- System.out.println("FootBall")
- FootballBag fb = new FootballBag();
- pb.putBalls(fb);
- }
-
- }
public class Main { public static void main(String[] args){ PutBall pb = new PutBall(); System.out.println("BasketBall"); BasketballBag bb = new BasketballBag(); pb.putBalls(bb); System.out.println("FootBall") FootballBag fb = new FootballBag(); pb.putBalls(fb); }}
运行报错,告诉我们参数类型不匹配。在上述程序中,如何使用
Java代码
- FootballBag fb = new FootballBag();
- pb.putBalls(fb);
FootballBag fb = new FootballBag();pb.putBalls(fb);
来执行呢?
那我们可以考虑使用一种办法是的pb.putBalls(fb) 中的 fb 参数类型能够和函数需要的类型相匹配。我们可以考虑让单独使用一个新的类,让他继承BasketballBag,并且加入扩展功能(调用/实例 FootballBag)。
Java代码
- public class BallBag extends BasketballBag{
- FootballBag fb;
- public BallBag(FootballBag fb){
- this.fb = fb;
- }
- public void putFootballs(){
- fb.putFootball();
- }
- }
public class BallBag extends BasketballBag{ FootballBag fb; public BallBag(FootballBag fb){ this.fb = fb; } public void putFootballs(){ fb.putFootball(); }}
类写好了,感觉不错,看看调试情况,修改一下刚刚的 Main类
Java代码
- public class Main {
- public static void main(String[] args){
- PutBall pb = new PutBall();
-
- System.out.println("BasketBall");
- BasketballBag bb = new BasketballBag();
- pb.putBalls(bb);
-
- System.out.println("FootBall")
- FootballBag fb = new FootballBag();
- BallBag bbag = new BallBag(fb);
- pb.putBalls(fb);
- }
-
- }
public class Main { public static void main(String[] args){ PutBall pb = new PutBall(); System.out.println("BasketBall"); BasketballBag bb = new BasketballBag(); pb.putBalls(bb); System.out.println("FootBall") FootballBag fb = new FootballBag(); BallBag bbag = new BallBag(fb); pb.putBalls(fb); }}
ok,测试通过。通过这个例子,我们得到一种把接口不兼容的类混合在一起使用的方法,而这种方法可以被称作Adapter模式。
相关推荐
适配器可以作为类结构(Class Adapter)或对象结构(Object Adapter)实现。 1. 类结构适配器:适配器作为一个基类,继承自原始接口,并实现目标接口。这种情况下,适配器类和适配对象之间存在继承关系。 2. 对象...
4. **软件开发中的Adapter模式**:在软件设计中,适配器模式是一种常用的设计模式,用于将已有类的接口转换成客户端期望的另一种接口。这有助于解决因接口不兼容而带来的问题,特别是在现有代码基础上进行扩展时非常...
- **Input Adapter**:Spring JMS Input Adapter监听JMS队列或主题,将接收到的消息转换为Esper事件。 - **Output Adapter**:Spring JMS Output Adapter则负责将Esper处理后的事件重新包装成JMS消息,并发送到指定...
Android ObjectAdapter Version: Java Kotlin Adapter that is similar to the ObjectAdapter (ArrayObjectAdapter) from the Leanback support library. ChangeLog 1.4 migrate to androidx Gradle Java ...
★第13章介绍了如何进一步学习设计模式,如何发掘新的设计模式等主题。 ★附录A介绍了剩下的设计模式:Bridge(桥接)、Builder(生成器)、Chainof Responsibility(责任链)、Flyweight(蝇量)、Interpreter...
本文研究的主要是python实现Adapter模式的相关内容,具体实现代码如下。 Adapter模式有两种实现方式一种是类方式。 #理解 #就是电源适配器的原理吧,将本来不兼容的接口类能够工作 #这个是类实现方式 #例子 #假如一...
在Android开发中,Adapter是一种非常重要的组件,它用于在ListView、RecyclerView等视图组件中展示数据。本示例“分离holder的低耦合度的adapter”着重探讨如何通过优化Adapter的设计来提高代码的可维护性和复用性。...
第25章 ABSTRACT SERVER模式、ADAPTER模式和BRIDGE模式 第26章 PROXY模式和STAIRWAY TO HEAVEN模式:管理第三方API 第27章 案例研究:气象站 第六部分 ETS案例研究 第28章 VISITOR模式 第29章 STATE模式 第30章 ETS...
Adapter模式分为两种形式:Class Adapter和Object Adapter。 1. Class Adapter(类适配器): 在C++中,Class Adapter模式通过多重继承实现。例如,`Adapter`类同时继承自`Target`接口和需要适配的`Adaptee`类。...
第二十五章 ABSTRACT SERVER模式、ADAPTER模式和BRIDGE模式 第二十六章 PROXY模式和STAIRWAY TO HEAVEN模式:管理第三方API 第二十七章 案例研究:气象站 第Ⅵ部分 ETS案例研究 第二十八章 VISITOR模式 第二十九章 ...
同时,我们使用了ViewHolder模式来存储并重用View,这样可以提高列表滚动时的流畅性。 除了基本的Adapter使用,xUtils还提供了API来进一步简化操作。例如,你可以使用`x.view().inject(this)` 来自动注入Adapter中...
为此,链中的每个链接都必须是ObjectAdapter的实例或可访问的属性。用法假设您有一个带有某些属性的对象,即我们的目标对象。 $ targetObject = new \stdClass();$ targetObject -> foo = 'bar' ; 我们从Object...
Target objectAdapter = new ObjectAdapter(new Adaptee()); objectAdapter.request(); } } ``` 在这个例子中,`Target` 是客户端期望的接口,`Adaptee` 是需要适配的类。类适配器 `ClassAdapter` 继承了 `...
例如,`ObjectAdapter`包含一个`Volt220`对象,实现了`FiveVolt`接口,并通过调用`Adaptee`的方法来完成适配。这种方式更加灵活,可以适配多个类,但可能需要额外的内存开销,因为要创建适配器对象和适配对象的实例...
这种设计模式不仅提高了应用程序的可维护性和可扩展性,还促进了数据和视图之间的解耦,使得开发者能够更加专注于各自的功能模块。 #### 二、Android Adapter 的家族成员 Android 提供了多种类型的 Adapter 来满足...
namespace DesignPatterns.AdapterPattern.Structural.ObjectAdapter{ public class Adaptee { public void SpecificRequest() { Console.WriteLine("Called SpecificRequest()"); } }}Adapter.cs:using System;...
compile 'com.lin:poweradapter:1.8@aar' Single 一种Item(SingleActivity) public class AnalogAdapter extends SingleAdapter { public AnalogAdapter(@Nullable Object listener) { super(listener); } @...
在实例中,首先创建了一个`List, Object>> listItems`作为数据集,每个Map代表一个列表项,包含了图片、标题、信息等数据。接着,创建了一个名为`ListViewAdapter`的自定义Adapter,继承自`BaseAdapter`,并传入上...
5. 适配器模式(Adapter Pattern):适配器模式将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以协同工作。 6. 观察者模式(Observer Pattern):观察者模式定义了...