双向适配器模式
A 模块与 B 模块
举例: PowerPoint 是 A ,字体管理器窗口是 B
A 中某一页面选择一段文字,右击选择“字体”,则字体管理器窗口跳出( A 对 B 产生了影响)。在字体管理器窗口设置过字体的属性后,点击“确定”, A 中这一段文字的字体产生相应的变化( B 对 A 产生了影响)。
上面就是一个使用双向适配器模式的例子。
下面例子程序的说明,请参考本文最后的一张截图。
package com.javaeye.kang.adapter;
/** * 双向适配器模式 * */ class A { public void funA1() { System. out .println( "A.funA1()" ); } public void funA2() { System. out .println( "A.funA2()" ); } }
class B { public void funB1() { System. out .println( "B.funB1()" ); } public void funB2() { System. out .println( "B.funB2()" ); } }
// 组 合 A 和 B ,将 AB 当成 A 和 B 来使用 class AB { private A a ; private B b ;
public void setA(A a) { this . a = a; } public void setB(B b) { this . b = b; }
// 功能 编 写 //A 的 对 象 调 用了 A 的 funA1() 方法后,同 时调 用 B 的 funB2() 方法 public void funA1() { a .funA1(); b .funB1(); } //B 的 对 象 调 用了 B 的 funB2() 方法后,同 时调 用 A 的 funA2() 方法 public void funB2() { b .funB2(); a .funA2(); } }
public class AdapterTest { public static void main(String []args) { AB ab = new AB(); // 传 入两个 类 的引用 ab.setA( new A()); ab.setB( new B()); // 客 户 端使用 ab.funA1(); ab.funB2(); } } |
测试结果:
A.funA1() B.funB1() B.funB2() A.funA2() |