`
kang
  • 浏览: 465877 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

结构模式之单向适配器模式Adapter

阅读更多

<!----><!----> <!---->

 

单向适配器模式:

 

适用场合:

 

假设现在有两个类:

class A {public void funA() {/*A的代码*/}}

class B {public void funB() {/*B的代码*/}}

这两个模块本来没有任何关系,但是现在应用中有这样的需求:

A对象调用funA方法时,一定要同时调用B的funB方法,但不允许修改源代码(即不允许修改类A或者类B的代码)

 

这种场景下,可以考虑使用适配器模式。


下面的代码对应讲的是图像处理软件在原先已经清晰化处理的基础上再进行去噪声处理的例子:

 

 

package com.javaeye.kang.adapter;

 

/**

  * 单项 适配器模式

  * 如果将 B 接到 A 上用(在原先 像清晰化的基 上再去噪声), A B

  * 要点是: 承方法

  */

class A {

      public void funA() {

            System. out .println( " 像清晰化! " );

      }

}

 

class B {

      public void funB () {

            System. out .println( " 像去噪声! " );

      }

}

 

// A 展,以后将 SubA 当成 A 来使用

// SubA funA 方法中增加 B funB 方法

class SubA extends A {

      public void funA() {

            super .funA();

            B b = new B();

            b.funB ();

      }

}

 

public class AdapterTest {

      public static void main(String[] args) {

            SubA subA = new SubA();

            subA.funA();

      }

}

 

测试结果:

像清晰化!

像去噪声!

 

 

 

改进: 面向接口编程

 

package com.javaeye.kang.adapter;

 

/**

  * 单项 适配器模式

  * 面向接口

  * 如果将 B 接到 A 上用(在原先 像清晰化的基 上再去噪声), A B

  * 要点是: 承方法

  */

 

class A {

      public void funA() {

            System. out .println( " 像清晰化! " );

      }

}

 

// 面向接口 程,噪声 理接口

// 使用接口来管理所有的 展模 (被 方模 可能 行互相切

interface YawpDispose {

      public abstract void yawpDispose();

}

 

class OldYawpDispose implements YawpDispose {

      public void yawpDispose() {

            System. out .println( " 像去噪声老算法! " );

      }

}

 

class NewYawpDispose implements YawpDispose {

      public void yawpDispose() {

            System. out .println( " 像去噪声新算法! " );

      }

}

 

// A 展,以后将 SubA 当成 A 来使用

// SubA funA 方法中增加 B funB 方法

class SubA extends A {

      // 完全面向接口 程,可以将 YawpDispose 的任何 实现类对 象引 来(可以使用 spring 象注入)

      private YawpDispose yawpDispos ;

      public SubA(YawpDispose yawpDispos) {

            this . yawpDispos = yawpDispos;

      }

     

      public void funA() {

            super .funA(); // 注意: 句代 可以去掉,假如去掉的 ,就是功能替

            // (不再使用 像清晰化功能了,而是只是使用下面的去噪声功能了)

            yawpDispos .yawpDispose();

      }

}

 

// 端、最 使用方

public class AdapterTest {

      public static void main(String[] args) {

            // 想使用 像去噪声老算法就 new OldYawpDispose() ,想使用新算法就 new NewYawpDispose ()

            // 下面 了多 ,可 充性比

            YawpDispose yawpDispos = new OldYawpDispose();

            // 将去噪声 理的 SubA 象中去

            SubA subA = new SubA(yawpDispos);

            subA.funA();

      }

}

 

测试结果:

像清晰化!

像去噪声老算法!

 

 

  • 描述: 回顾创建模式,开始结构模式
  • 大小: 32.5 KB
  • 描述: 适配器模式
  • 大小: 134.7 KB
  • 描述: 单向适配器模式要点
  • 大小: 89.5 KB
分享到:
评论

相关推荐

    Android 适配器模式应用及设计原理

    适配器又分为单向适配器和双向适配器,在 android 中前者使用的比较频繁。比较常见的实现方式是:首先定义一个适配类,内部定义一个私有的需要适配的对象,该类提供一个构造函数,将该对象的一个实例作为参数传入,...

    react-player-adapter:React 应用程序的适配器组件,可以轻松与 VersalPlayerAPI 实例集成

    保存给玩家的所有数据都通过 props(是的,单向)流回到包裹的组件中。 PlayerAdapter接受一个名为propertySheets的道具,其中包含您的应用所需的属性表架构。 属性表中的数据将与其他数据一起通过props流回您的...

    java 面试题 总结

    Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless Session Bean ,这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通常来...

    超级有影响力霸气的Java面试题大全文档

     Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless Session Bean ,这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通常...

    recycling-center:将React性数据流带到RecyclerViews

    回收中心是一个旨在支持以下模式的库:使用不可变的ViewModels的React性单向数据流。 它将RxJava的React性数据流与RecyclerView的高效UI结合在一起,并通过“视图”部分和“视图模型”支持UI组合。 入门 回收中心...

    C++ STL开发技术导引(第5章)

    4.4.5 适配器(Adapter) 55 4.4.6 内存分配器(Allocator) 56 4.4.7 概念(Concept)和模型(Model) 56 4.5 C++ STL存在的一些问题 57 4.6 本章小结 57 第5章 C++ STL泛化技术分析 58 5.1 算法和迭代器 58 ...

    C++ STL 开发技术导引(第6章)

    4.4.5 适配器(Adapter) 55 4.4.6 内存分配器(Allocator) 56 4.4.7 概念(Concept)和模型(Model) 56 4.5 C++ STL存在的一些问题 57 4.6 本章小结 57 第5章 C++ STL泛化技术分析 58 5.1 算法和迭代器 58 ...

    C++ STL开发技术导引(第3章)

    4.4.5 适配器(Adapter) 55 4.4.6 内存分配器(Allocator) 56 4.4.7 概念(Concept)和模型(Model) 56 4.5 C++ STL存在的一些问题 57 4.6 本章小结 57 第5章 C++ STL泛化技术分析 58 5.1 算法和迭代器 58 ...

    java编程基础,应用与实例

    17.4 适配器类(Adapter) 285 17.5 文本事件(TextEvent)及其处理 286 17.6 输入事件(InputEvent)抽象类 287 17.7 键盘事件(KeyEvent)及其处理 287 17.8 鼠标事件(MouseEvent)及其处理 291 17.9 项目事件...

    VMWare 7.0.1 build-227600

     选择第二项,使用NAT网卡(VMnet8虚拟网卡),表示虚拟机通过主机单向访问主机及主机之外的网络,主机之外的网络中的计算机,不能访问该虚拟机。  选择第三项,只使用本地网络(VMnet1虚拟网卡),表示虚拟机只能访问...

Global site tag (gtag.js) - Google Analytics