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++设计模式:Adapter模式解析与应用》 在软件工程中,设计模式是一种解决常见问题的可重用解决方案,它代表了最佳实践,并已被广泛接受。Adapter模式,也称为适配器模式,是设计模式中的一种,它允许两个不兼容...
4. **软件开发中的Adapter模式**:在软件设计中,适配器模式是一种常用的设计模式,用于将已有类的接口转换成客户端期望的另一种接口。这有助于解决因接口不兼容而带来的问题,特别是在现有代码基础上进行扩展时非常...
- **Data Formats**:支持Object和String CSV两种数据格式,便于解析和传输不同类型的数据。 #### 6. The Relational Database Adapter Relational Database Adapter使得Esper能够与关系型数据库进行交互。 - **...
本文研究的主要是python实现Adapter模式的相关内容,具体实现代码如下。 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 ...
在Android开发中,Adapter是一种非常重要的组件,它用于在ListView、RecyclerView等视图组件中展示数据。本示例“分离holder的低耦合度的adapter”着重探讨如何通过优化Adapter的设计来提高代码的可维护性和复用性。...
同时,我们使用了ViewHolder模式来存储并重用View,这样可以提高列表滚动时的流畅性。 除了基本的Adapter使用,xUtils还提供了API来进一步简化操作。例如,你可以使用`x.view().inject(this)` 来自动注入Adapter中...
例如,`ObjectAdapter`包含一个`Volt220`对象,实现了`FiveVolt`接口,并通过调用`Adaptee`的方法来完成适配。这种方式更加灵活,可以适配多个类,但可能需要额外的内存开销,因为要创建适配器对象和适配对象的实例...
Target objectAdapter = new ObjectAdapter(new Adaptee()); objectAdapter.request(); } } ``` 在这个例子中,`Target` 是客户端期望的接口,`Adaptee` 是需要适配的类。类适配器 `ClassAdapter` 继承了 `...
Adapter模式分为两种形式:Class Adapter和Object Adapter。 1. Class Adapter(类适配器): 在C++中,Class Adapter模式通过多重继承实现。例如,`Adapter`类同时继承自`Target`接口和需要适配的`Adaptee`类。...
这种设计模式不仅提高了应用程序的可维护性和可扩展性,还促进了数据和视图之间的解耦,使得开发者能够更加专注于各自的功能模块。 #### 二、Android Adapter 的家族成员 Android 提供了多种类型的 Adapter 来满足...
为此,链中的每个链接都必须是ObjectAdapter的实例或可访问的属性。用法假设您有一个带有某些属性的对象,即我们的目标对象。 $ targetObject = new \stdClass();$ targetObject -> foo = 'bar' ; 我们从Object...
在实例中,首先创建了一个`List, Object>> listItems`作为数据集,每个Map代表一个列表项,包含了图片、标题、信息等数据。接着,创建了一个名为`ListViewAdapter`的自定义Adapter,继承自`BaseAdapter`,并传入上...
ArrayList动态删除与自定义Adapter是Android开发中的常见操作,它涉及到数据存储、用户界面更新以及适配器模式的运用。在Android中,ListView是展示大量数据的常用组件,而ArrayList作为Java集合框架的一部分,通常...
android-Stupid-Adapter 一个比较蠢的adapter,一切只是为了少写两行代码, 支持listview,gridView, recyclerview, 的... 1.1.1 解释 XAdapter2 adapter //存放在adapter里的数据格式,也可以指定object 例子 XAdapter
public AnalogAdapter(@Nullable Object listener) { super(listener); } @Override public boolean isSelectable(@IntRange(from = 0) int position) { return true; } @Override public ...
适配器模式(Adapter Pattern) 桥接模式(Bridge Pattern) 过滤器模式(Filter、Criteria Pattern) 组合模式(Composite Pattern) 装饰器模式(Decorator Pattern) 外观模式(Facade Pattern) 享元模式...
可以使用`switch`语句或者策略模式来实现。 5. **性能优化**:使用convertView进行视图复用,避免频繁创建新视图,提高性能。同时,注意避免内存泄漏,确保Adapter与Activity或Fragment的生命周期同步。 6. **事件...