`
zhyxfancy
  • 浏览: 53659 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Adapter模式(Object Adapter)

 
阅读更多
Adapter模式使原本由于接口不兼容而不能在一起工作的类可以一起工作,即为一个内容合适但接口不匹配的对象创建一个新的接口.Adapter模式让现存的对象适应新的类结构,而不受他们的接口限制.
例如现在,我们有一个球袋类BasketballBag负责完成装入篮球。
Java代码 
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(); 
    } 


此时我们有一个足球类FootballBag负责装入完成装入足球。
Java代码 
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); 
    } 
 


运行报错,告诉我们参数类型不匹配。在上述程序中,如何使用
Java代码 
FootballBag fb = new FootballBag(); 
pb.putBalls(fb); 

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

    public BallBag(FootballBag fb)
    {
        this.fb = fb;
    }

    public void putBasketball() //It will be better if the name is "putBall"
    {
        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(bbag);  //shouldn't be fb , in my opinion.
    }
}

ok,测试通过。通过这个例子,我们得到一种把接口不兼容的类混合在一起使用的方法,而这种方法可以被称作Adapter模式。
分享到:
评论

相关推荐

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

    《C++设计模式:Adapter模式解析与应用》 在软件工程中,设计模式是一种解决常见问题的可重用解决方案,它代表了最佳实践,并已被广泛接受。Adapter模式,也称为适配器模式,是设计模式中的一种,它允许两个不兼容...

    android开发Adapter详解

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

    esper_adapter_reference

    - **Data Formats**:支持Object和String CSV两种数据格式,便于解析和传输不同类型的数据。 #### 6. The Relational Database Adapter Relational Database Adapter使得Esper能够与关系型数据库进行交互。 - **...

    python实现Adapter模式实例代码

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

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

    分离holder的低耦合度的adapter

    在Android开发中,Adapter是一种非常重要的组件,它用于在ListView、RecyclerView等视图组件中展示数据。本示例“分离holder的低耦合度的adapter”着重探讨如何通过优化Adapter的设计来提高代码的可维护性和复用性。...

    最简洁的adapter

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

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

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

    java设计模式之适配器模式

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

    C++入门级设计模式

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

    android Adapter教程

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

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

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

    Android之自定义Adapter的ListView

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

    ArrayList动态删除 自定义Adapter (附源码)

    ArrayList动态删除与自定义Adapter是Android开发中的常见操作,它涉及到数据存储、用户界面更新以及适配器模式的运用。在Android中,ListView是展示大量数据的常用组件,而ArrayList作为Java集合框架的一部分,通常...

    Android代码-android-Stupid-Adapter

    android-Stupid-Adapter 一个比较蠢的adapter,一切只是为了少写两行代码, 支持listview,gridView, recyclerview, 的... 1.1.1 解释 XAdapter2 adapter //存放在adapter里的数据格式,也可以指定object 例子 XAdapter

    Android代码-PowerAdapter

    public AnalogAdapter(@Nullable Object listener) { super(listener); } @Override public boolean isSelectable(@IntRange(from = 0) int position) { return true; } @Override public ...

    用Java实现23种设计模式

    适配器模式(Adapter Pattern) 桥接模式(Bridge Pattern) 过滤器模式(Filter、Criteria Pattern) 组合模式(Composite Pattern) 装饰器模式(Decorator Pattern) 外观模式(Facade Pattern) 享元模式...

    万能的adapter

    可以使用`switch`语句或者策略模式来实现。 5. **性能优化**:使用convertView进行视图复用,避免频繁创建新视图,提高性能。同时,注意避免内存泄漏,确保Adapter与Activity或Fragment的生命周期同步。 6. **事件...

Global site tag (gtag.js) - Google Analytics