Android开发

您所在的位置:网站首页 java适配器模式应用场景包括 Android开发

Android开发

2024-07-08 13:53| 来源: 网络整理| 查看: 265

适配器模式 介绍模式角色模式结构图模式实现类的适配器模式对象的适配器模式模式退化模式使用场景缺省适配模式(Default Adapter)

介绍

        适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够放在一起工作(也有人把这种模式称为叫做包装(Wrapper)模式)。

模式角色

适配器模式有以下角色:

Target(目标),这就是所期待得到的接口。Adaptee(源),现有需要适配的接口。Adapter(适配器),适配器类是本模式的核心。适配器把Adaptee转换成Target。 模式结构图 类的适配器模式结构图 在这里插入图片描述对象的适配器模式结构图 在这里插入图片描述 模式实现 类的适配器模式对象的适配器模式 类的适配器模式 public interface Target { void doSomething1(); // Adaptee中没有的方法 void doSomething2(); } public class Adaptee { public void doSomething1() { // 业务逻辑 } } /** * 类的适配器模式 */ public class Adapter extends Adaptee implements Target { // Adaptee中没有方法doSomething2,因此适配器类补充此方法 @Override public void doSomething2() { // 业务逻辑 } }

        类的适配器模式。使用一个具体类Adapter把Adaptee适配到Target。这样一来,如果Adaptee以及Adaptee的子类都使用此Adapter适配,就行不通了。由于适配器Adapter是Adaptee的子类,因此可以在Adapter中重写(override)Adaptee的一些方法。由于只引进了一个Adapter类,因此只有一个路线到达Target类,使问题得到简化。

对象的适配器模式 public interface Target { public void doSomething1(); // Adaptee中没有的方法 public void doSomething2(); } public class Adaptee { public void doSomething1() { // 业务逻辑 } } /** * 对象的适配器模式 */ public class Adapter implements Target { private Adaptee adaptee; public Adapter(Adaptee adaptee) { super(); this.adaptee = adaptee; } @Override public void doSomething1() { adaptee.doSomething1(); } // Adaptee中没有方法doSomething2,因此适配器类补充此方法 @Override public void doSomething2() { // 业务逻辑 } }

        对象的适配器模式。一个Adapter可以把多种不同的Adaptee适配到同一个Target。换言之,同一个Adapter可以把Adaptee和Adaptee的子类都适配到Target;与类的适配器模式相比,要想重写(override)Adaptee的方法就不容易。如果一定要重写(override)Adaptee类的一个或多个方法,就只好先创建一个Adaptee的子类,将Adaptee的方法置换掉,然后再把Adaptee的子类当做真正的Adaptee进行适配;虽然要想重写(override)Adaptee的方法不容易,但是要想增加一些新的方法则方便得很,而且新增加的方法可同时适用于所有的Adaptee。

模式退化

        Target可以省略,此时Target和Adaptee实际上相同。由于Adaptee是一个接口,而Adapter是一个类(或抽象类),因此这种做法看似平庸而并不平庸,它可以使客户端不必实现不需要的方法。如缺省适配器模式。

模式使用场景 系统需要使用现有的类,而此类的接口不符合系统的需要。想要建立一个可以重复使用的类 ,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。这个源类不一定有很复杂的接口。在设计里(对对象的适配器模式而言),需要改变多个已有的子类的接口,如果使用类的适配器模式,就要针对每一个子类做一个适配器类,而这个不太实际。 缺省适配模式(Default Adapter)

        缺省适配模式为一个接口提供缺省实现·,这样子类型可以从这个缺省实现进行扩展,而不必从原有接口进行扩展。         在很多情况下,必须让一个具体类实现某一个接口,但是这个类又用不到接口所规定的所有的方法。通常的处理方法是,这个具体类要实现所有的方法,那些有用的方法要有实现,那些没有用的方法也要有空的、平庸的实现。

/** * 在Android中,控件TextView添加监听,常用匿名类的方式实现。但是大多数情况下 * 只会使用TextWatcher中的afterTextChanged方法。 */ textView.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { } });

用缺省适配模式之后如下:

/** * 用一个具体类实现TextWatcher的所有的方法。 */ public class SimpleTextWatcher implements TextWatcher { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { } } textView.addTextChangedListener(new SimpleTextWatcher() { @Override public void afterTextChanged(Editable s) { super.afterTextChanged(s); // 逻辑 } });


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3