`

主题:Adapter模式(Object Adapter)

阅读更多

Adapter模式使原本由于接口不兼容而不能在一起工作的类可以一起工作,即为一个内容合适但接口不匹配的对象创建一个新的接口.Adapter模式让现存的对象适应新的类结构,而不受他们的接口限制.

例如现在,我们有一个球袋类BasketballBag负责完成装入篮球。

Java代码

 

  1. public class BasketballBag{   
  2.     public void putBasketball(){   
  3.         System.out.println("Put in BasketBall....");   
  4.     }   
  5. }  

 

public class BasketballBag{ public void putBasketball(){ System.out.println("Put in BasketBall...."); }}

有一个专门负责装入操作的类的方法putBalls()来调用BasketballBag类中方法来放入篮球。

Java代码

 

  1. public class PutBall{   
  2.     public void putBalls(BasketballBag bb){   
  3.         bb.putBasketball();   
  4.     }   
  5. }  

 

public class PutBall{ public void putBalls(BasketballBag bb){ bb.putBasketball(); }}

此时我们有一个足球类FootballBag负责装入完成装入足球。

Java代码

 

  1. public class FootballBag{   
  2.     public void putFootball(){   
  3.         System.out.println("Put in FootBall....");   
  4.     }   
  5. }  

 

public class FootballBag{ public void putFootball(){ System.out.println("Put in FootBall...."); }}

前面提到的类中的方法putBalls()用来调用BaskballBag中的方法来放入篮球,我们能不能使用同一个方法来放入足球呢?我们试一试

Java代码

 

  1. public class Main {   
  2.     public static void main(String[] args){   
  3.         PutBall pb = new PutBall();   
  4.            
  5.         System.out.println("BasketBall");   
  6.         BasketballBag bb = new BasketballBag();   
  7.         pb.putBalls(bb);   
  8.            
  9.         System.out.println("FootBall")   
  10.         FootballBag fb = new FootballBag();   
  11.         pb.putBalls(fb);   
  12.     }   
  13.   
  14. }  

 

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代码

 

  1. FootballBag fb = new FootballBag();   
  2. pb.putBalls(fb);  

 

FootballBag fb = new FootballBag();pb.putBalls(fb);

来执行呢?

那我们可以考虑使用一种办法是的pb.putBalls(fb) 中的 fb 参数类型能够和函数需要的类型相匹配。我们可以考虑让单独使用一个新的类,让他继承BasketballBag,并且加入扩展功能(调用/实例 FootballBag)。

Java代码

 

  1. public class BallBag extends BasketballBag{   
  2.     FootballBag fb;   
  3.     public BallBag(FootballBag fb){   
  4.         this.fb = fb;   
  5.     }   
  6.     public void putFootballs(){   
  7.         fb.putFootball();   
  8.     }   
  9. }   

 

public class BallBag extends BasketballBag{ FootballBag fb; public BallBag(FootballBag fb){ this.fb = fb; } public void putFootballs(){ fb.putFootball(); }}

类写好了,感觉不错,看看调试情况,修改一下刚刚的 Main类

Java代码

 

  1. public class Main {   
  2.     public static void main(String[] args){   
  3.         PutBall pb = new PutBall();   
  4.            
  5.         System.out.println("BasketBall");   
  6.         BasketballBag bb = new BasketballBag();   
  7.         pb.putBalls(bb);   
  8.            
  9.         System.out.println("FootBall")   
  10.         FootballBag fb = new FootballBag();   
  11.         BallBag bbag = new BallBag(fb);   
  12.         pb.putBalls(fb);   
  13.     }   
  14.   
  15. }  

 

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模式。

分享到:
评论

相关推荐

    C++设计模式代码资源16_Adapter.zip

    适配器可以作为类结构(Class Adapter)或对象结构(Object Adapter)实现。 1. 类结构适配器:适配器作为一个基类,继承自原始接口,并实现目标接口。这种情况下,适配器类和适配对象之间存在继承关系。 2. 对象...

    android开发Adapter详解

    4. **软件开发中的Adapter模式**:在软件设计中,适配器模式是一种常用的设计模式,用于将已有类的接口转换成客户端期望的另一种接口。这有助于解决因接口不兼容而带来的问题,特别是在现有代码基础上进行扩展时非常...

    esper_adapter_reference

    - **Input Adapter**:Spring JMS Input Adapter监听JMS队列或主题,将接收到的消息转换为Esper事件。 - **Output Adapter**:Spring JMS Output Adapter则负责将Esper处理后的事件重新包装成JMS消息,并发送到指定...

    Android代码-android-object-adapter

    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 ...

    design patterns elements of reusable object-oriented software

    ★第13章介绍了如何进一步学习设计模式,如何发掘新的设计模式等主题。 ★附录A介绍了剩下的设计模式:Bridge(桥接)、Builder(生成器)、Chainof Responsibility(责任链)、Flyweight(蝇量)、Interpreter...

    python实现Adapter模式实例代码

    本文研究的主要是python实现Adapter模式的相关内容,具体实现代码如下。 Adapter模式有两种实现方式一种是类方式。 #理解 #就是电源适配器的原理吧,将本来不兼容的接口类能够工作 #这个是类实现方式 #例子 #假如一...

    分离holder的低耦合度的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...

    C++入门级设计模式

    Adapter模式分为两种形式:Class Adapter和Object Adapter。 1. Class Adapter(类适配器): 在C++中,Class Adapter模式通过多重继承实现。例如,`Adapter`类同时继承自`Target`接口和需要适配的`Adaptee`类。...

    敏捷软件开发:原则、模式与实践.pdf

    第二十五章 ABSTRACT SERVER模式、ADAPTER模式和BRIDGE模式 第二十六章 PROXY模式和STAIRWAY TO HEAVEN模式:管理第三方API 第二十七章 案例研究:气象站 第Ⅵ部分 ETS案例研究 第二十八章 VISITOR模式 第二十九章 ...

    最简洁的adapter

    同时,我们使用了ViewHolder模式来存储并重用View,这样可以提高列表滚动时的流畅性。 除了基本的Adapter使用,xUtils还提供了API来进一步简化操作。例如,你可以使用`x.view().inject(this)` 来自动注入Adapter中...

    object-adapter:提供目标对象的适配器,可通过魔术获取器和设置器轻松访问属性

    为此,链中的每个链接都必须是ObjectAdapter的实例或可访问的属性。用法假设您有一个带有某些属性的对象,即我们的目标对象。 $ targetObject = new \stdClass();$ targetObject -> foo = 'bar' ; 我们从Object...

    java设计模式之适配器模式

    Target objectAdapter = new ObjectAdapter(new Adaptee()); objectAdapter.request(); } } ``` 在这个例子中,`Target` 是客户端期望的接口,`Adaptee` 是需要适配的类。类适配器 `ClassAdapter` 继承了 `...

    Android设计模式之适配器(Adapter)模式

    例如,`ObjectAdapter`包含一个`Volt220`对象,实现了`FiveVolt`接口,并通过调用`Adaptee`的方法来完成适配。这种方式更加灵活,可以适配多个类,但可能需要额外的内存开销,因为要创建适配器对象和适配对象的实例...

    android Adapter教程

    这种设计模式不仅提高了应用程序的可维护性和可扩展性,还促进了数据和视图之间的解耦,使得开发者能够更加专注于各自的功能模块。 #### 二、Android Adapter 的家族成员 Android 提供了多种类型的 Adapter 来满足...

    C#设计模式编程中运用适配器模式结构实战演练

    namespace DesignPatterns.AdapterPattern.Structural.ObjectAdapter{ public class Adaptee { public void SpecificRequest() { Console.WriteLine("Called SpecificRequest()"); } }}Adapter.cs:using System;...

    Android代码-PowerAdapter

    compile 'com.lin:poweradapter:1.8@aar' Single 一种Item(SingleActivity) public class AnalogAdapter extends SingleAdapter { public AnalogAdapter(@Nullable Object listener) { super(listener); } @...

    Android之自定义Adapter的ListView

    在实例中,首先创建了一个`List, Object>> listItems`作为数据集,每个Map代表一个列表项,包含了图片、标题、信息等数据。接着,创建了一个名为`ListViewAdapter`的自定义Adapter,继承自`BaseAdapter`,并传入上...

    java设计模式之面向对象的思想(think in OO(Object Oriented))

    5. 适配器模式(Adapter Pattern):适配器模式将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以协同工作。 6. 观察者模式(Observer Pattern):观察者模式定义了...

Global site tag (gtag.js) - Google Analytics