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方法
}
}