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

Adapter模式(Object Adapter)

阅读更多
Adapter模式使原本由于接口不兼容而不能在一起工作的类可以一起工作,即为一个内容合适但接口不匹配的对象创建一个新的接口.Adapter模式让现存的对象适应新的类结构,而不受他们的接口限制.
例如现在,我们有一个球袋类BasketballBag负责完成装入篮球。
public class BasketballBag{
    public void putBasketball(){
        System.out.println("Put in BasketBall....");
    }
}

有一个专门负责装入操作的类的方法putBalls()来调用BasketballBag类中方法来放入篮球。
public class PutBall{
    public void putBalls(BasketballBag bb){
        bb.putBasketball();
    }
}

此时我们有一个足球类FootballBag负责装入完成装入足球。
public class FootballBag{
    public void putFootball(){
        System.out.println("Put in FootBall....");
    }
}

前面提到的类中的方法putBalls()用来调用BaskballBag中的方法来放入篮球,我们能不能使用同一个方法来放入足球呢?我们试一试
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);
    }

}

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

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

类写好了,感觉不错,看看调试情况,修改一下刚刚的 Main类
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模式。














分享到:
评论
6 楼 qingfengjushi1 2008-11-21  
LZ的例子测试过吗?
5 楼 liuleigang 2008-11-20  
楼主举的例子能测试通过?在BallBag的putBaseketBall方法中要调用putFootball。
4 楼 Ozone 2008-05-05  
In your opinion bbag don't equal to fb ? I think ,BallBag is a help object,which have equal BallBag with BasketballBag. 
3 楼 duanbo 2008-05-05  
Ozone 写道
Ok。No problem,next demo is class adapter.


pls see my update.
2 楼 Ozone 2008-05-05  
Ok。No problem,next demo is class adapter.
1 楼 duanbo 2008-05-05  
It's the Object Adapter.
Class Adapter need to be demo.

What's more, I think there's a problem with the last paragraph.

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


And the BallBag class override the putBasketball() fuction.

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();
    }
}


upwards is my understanding. I'm beginner of pattern. Talk about it together.


相关推荐

    36种最新设计模式整理

    Design Pattern: Adapter 模式 - Object Adapter 32 Design Pattern: Adapter 模式 - Class Adapter 36 Design Pattern: Bridge 模式 38 Design Pattern: Composite 模式 40 Design Pattern: Decorator 模式 41 ...

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

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

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

    用Java实现23种设计模式

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

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

    33种JAVA设计模式DEMO

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

    listviewAdapter

    Adapter的一种写法 package com.xxkjx.jiusanqi; import java.util.List; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; ...

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

    第25章 ABSTRACT SERVER模式、ADAPTER模式和BRIDGE模式 第26章 PROXY模式和STAIRWAY TO HEAVEN模式:管理第三方API 第27章 案例研究:气象站 第六部分 ETS案例研究 第28章 VISITOR模式 第29章 STATE模式 第30章 ETS...

    CommonAdapter-通过封装BaseAdapter和RecyclerView.Adapter得到的通用的,简易的Adapter.zip

    提供了getConvertedData(data, type)方法来对item传入的数据做转换,方便拆包和提升item的复用性 支持viewpager的正常加载模式和懒加载 支持快速将listview的适配器切换为recyclerView的适配器 viewpager的...

    设计模式手册 图表例子完全

    代码例子是C++和C#的 chm格式 一、创建型 FactoryMethod Abstract Factory Builder Prototype Singleton ... Adapter_Class Adapter_Object Bridge 等等 三、行为型 Interpreter TemplateMethod等等

    设计模式解析-英文

    Adapter模式 72 第8章 开拓视野 82 第9章 Strategy模式 98 第10章 Bridge模式 113 第11章 Abstract Factory模式 138 第12章 专家设计之道 154 第13章 用模式解决CAD/CAM问题 162 第五部分 迈向新的设计方式 第14章 ...

    设计模式迷你手册(CHM版)

    创建型 结构型 行为型 ...Singleton Adapter_Object Bridge Composite Decorator Facade Flyweight Proxy Chain of Responsibility Command Iterator Mediator Memento Observer State Strategy Visitor

    敏捷软件开发原则、模式与实践 C#版

    OBSERVER——演化至模式 第33章 ABSTRACT SERVER模式、 ADAPTER模式和BRIDGE模式 第34章 PROXY模式和GATEWAY模式:管理第三方API 第35章 VISITOR模式 第36章 STATE模式 第37章 薪水支付案例研究:数据库 第38章 薪水...

    C++设计模式

    二、结构图(1)classadapter(2)objectadapter三、实现和其他很多模式一样,学习设计模式的重点是学习每种模式的思想,而不应拘泥于它的某种具体结构图和实现。因为模式是灵活的,其实现可以是千变万化的,只是所谓万...

    设计模式可复用面向对象软件的基础.zip

    英文原书名: Design Patterns:Elements of Reusable Object-Oriented software 作者: Erich Gamma 等 译者: 李英军 马晓星 蔡敏 刘建中 书号: 7-111-07575-7 页码: 254 定价: ¥35.00 会员价: ¥31.50 币值: 315 ...

    ASP.NET设计模式-杨明军译(源码)

    2.4.2 根据Adapter模式进行重构 2.4.3 利用企业模式 2.5 小结 第Ⅱ部分 剖析ASP.NET应用程序:学习并应用模式 第3章 应用程序分层与关注点分离 3.1 应用程序体系结构与设计 3.1.1 反模式:智能UI 3.1.2 ...

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

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

    design patterns elements of reusable object-oriented software

    ★第1章至第11章陆续介绍了设计模式:Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton、Command、Adapter、Facade、TemplatMethod、Iterator、Composite、State、Proxy。 ★第12章介绍...

Global site tag (gtag.js) - Google Analytics