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

本文介绍单向适配器模式的应用场景与实现方式。在不修改原有代码的前提下,通过继承扩展类A的功能,在执行funA方法时附加执行类B的funB方法,实现图像清晰化后再去噪声的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

单向适配器模式:

 

适用场合:

 

假设现在有两个类:

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

      }

}

 

测试结果:

图 像清晰化!

图 像去噪声老算法!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值