`
hjp222
  • 浏览: 16137 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

双向适配器模式笔记

阅读更多
package com.donnie;
/*应用需要凡是以后A的对象调用了funA1方法, 一定要同时调用B的funB1方法;
 * B的对象调用了funB2方法,一定要同时调用A的funA2方法;怎么办?不能改变源代码*/
//双向适配器模式要点是:组合法

/*class A1 {
	public void funA1(){
	System.out.println("funA1 方法");	}
	public void funA2(){
		System.out.println("funA1 方法");}
}
class B1{
	public void funB1(){
		System.out.println("funB1 方法");}
	public void funB2(){
		System.out.println("funB2 方法");}
}

class AB{  //组合A和B 将AB当成A和B来使用
	private A1 a;
	private B1 b;
	public void setA(A1 a){
		this.a=a;
	}
	public void setB(B1 b){
		this.b=b;
	}
	//
	public void funA1(){
		a.funA1();
		b.funB1();
	}
	public void funB2(){
		b.funB2();
		a.funA2();
	}
}
public class Adapter2 {
public static void main (String args[]){
	AB ab =new AB();
	ab.setA(new A1());
	ab.setB(new B1());
	ab.funA1(); 
	//这样就实现对象调用了funA1方法,同时又调用了B的funB1方法
}
}*/
//-------------------------
//上面的方法不容易切换,所以还是得面向接口编程
interface IA{
	public abstract void funA1();
	public abstract void funA2();
}
class A1 implements IA{
	public void funA1(){
	System.out.println("funA1 方法");	}
	public void funA2(){
		System.out.println("funA1 方法");}
}
interface IB{
	public abstract void funB1();
	public abstract void funB2();
}
class B1 implements IB{
	public void funB1(){
		System.out.println("funB1 方法");}
	public void funB2(){
		System.out.println("funB2 方法");}
}

class AB implements IA,IB{  //组合A和B 将AB当成A和B来使用 ,实现IA,IB避免功能缺失
	private IA ia;
	private IB ib;
	public void setIa(IA ia) {
		this.ia = ia;
	}
	public void setIb(IB ib) {
		this.ib = ib;
	}
	//
	public void funA1(){
		ia.funA1();
		ib.funB1();
	}
	public void funB2(){
		ib.funB2();
		ia.funA2();
	}
	
	public void funA2() {
		ia.funA2();
		
	}
	public void funB1() {
		ib.funB2();
		
	}

}
public class Adapter2 {
public static void main (String args[]){
	AB ab =new AB();
	ab.setIa(new A1());
	ab.setIb(new B1());
	ab.funA1(); 
	//这样就实现对象调用了funA1方法,同时又调用了B的funB1方法
}
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics