六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 25|回复: 0

单向适配器模式笔记

[复制链接]

升级  82%

9

主题

9

主题

9

主题

童生

Rank: 1

积分
41
 楼主| 发表于 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 void  main(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 void  main(String args[]){//SubA sa=new SubA(new B()); SubA sa=new SubA(new C());  //这样改下构造函数的参数就可以切换了,实现扩展功能的切换sa.funA();}} 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表