hjp222 发表于 2013-2-4 19:50:19

单向适配器模式笔记

package com.donnie;/*有两个模块本来没有任何关系,但是应用中需凡是以后A的对象调用了funA方法,一定要同调用B的funB方法,怎么办?不能改变源代码*///如果将B接到A上用,这叫做单向适配器模式,注意分清主动方,和被动方,这里类A是主动方,B是被动方//单向适配器模式的要点:继承方法/*class A{public void funA(){System.out.println("a 方法");}}class B{public void funB(){System.out.print("b 方法");}}class SubA extends A{//将A进行扩展,以后将SubA当成A用public void funA(){ super.funA(); B b=new B(); b.funB();}}public class Adapter {public static voidmain(String args[]){SubA sa=new SubA();sa.funA();}}*///----------------------------------//假如被动方可能被切换,这样比较麻烦,为了方便,最好面向接口编程class A{public void funA(){System.out.println("a 方法");}}interface IEM{   //定义一个接口,管理扩展模块(被动方)public abstract void extendFun();}class B implements IEM {public void extendFun(){System.out.print("b 方法");}}class C implements IEM{public void extendFun(){System.out.println("另一个方法");}}class SubA extends A{ //将A进行扩展,以后将SubA当成A用private IEM iem;//完全面向接口编程,可以将IEM的任何实现类接入,Spring可以做public SubA(IEM iem){this.iem=iem;}public void funA(){ super.funA();//假如这行去掉,就是有了功能替换的效果,假如不要A方法了,只用扩展功能的方法,就可以去掉这行 iem.extendFun();}}public class Adapter {public static voidmain(String args[]){//SubA sa=new SubA(new B()); SubA sa=new SubA(new C());//这样改下构造函数的参数就可以切换了,实现扩展功能的切换sa.funA();}} 
页: [1]
查看完整版本: 单向适配器模式笔记