Java設計モードの一方向アダプタモード


通常、2つの互いに関連しないクラスがあれば、このような問題に直面します.
class A
{
    public a()
   {
       System.out.println("      !");
   }
}
class B
{
    public b()
   {
       System.out.println("   !");
   }
}

問題は、Aクラスのメソッドa()を呼び出すと同時にBクラスのb()メソッドを呼び出さなければならない場合、ソースコードを変更しない場合、どのように実現しますか?
 
実はこのような問題を解決する方法はたくさんあって、私たちは実際の状況でもよく出会って、私の方法はアダプタモードを利用して解決します!
1つ目の方法:
新しいクラスSubA継承Aを定義し、私たちが呼び出すときに直接Aクラスのサブクラス(すなわちSubA)を呼び出します.コードは以下の通りです.
 
class A
{
    public a()
   {
       System.out.println("      !");
   }
}
class B
{
    public b()
   {
       System.out.println("   !");
   }
}
class SubA extends A
{
      //     A  a  
     public a()
      {
             //      
             super.a();
            //new  B   
            B b=new B();
            //  b b()  ,        "   "     !
            b.b();
      }
}
/*
 *   
 */
public class Test
{
       public static void main(String args[])
      {
               SubA a=new SubA();
               //            B  b  ,      。
               a.a();
      }
}

お客様のニーズに変更があれば、「表情を加える」機能が必要であることに気づきましたか?SubAクラスaメソッドのコードを変更する必要がありますか?コードを変更してはいけないと言っているのではないでしょうか.どうすればいいの?頭が痛い...幸い.....Javaにはインタフェースがありますか?インタフェースを利用してこのような機能を実現することができます.
2つ目の方法:
追加する機能をインタフェースに抽象化します.こんな感じで
interface Manager
{
    public abstract void extendFun();
}

 
extendFun()メソッドは、お客様が必要とする「機能の定義」です.インタフェースは実装する必要があるため、次のクラスを定義します.
class A
{
    public a()
   {
       System.out.println("      !");
   }
}
//    
interface Manager
{
     public abstract void extendFun();
}
// B   Manager  
class B implements Manager
{
     //       ,        extendFun()  
//    public b()
//  {
//       System.out.println("   !");
//  }
    public void extendFun()
   {
           System.out.println("   !");
   }
   
}
// C   Manager  
class C implements Manager
{
//    public c()
//   {
//       System.out.println("     !");
//   }
    public void extendFun()
    {
           System.out.println("     !");
    }
}

class SubA extends A
{
     //    Manager    
     private Manager manager;
     //          ,    ,      Manager     
   //            ,      Spring           
    public SubA(Manager manager)
     {
         this.manager=manager;
     }
     //       
    public a()
      {
         super.a();
        //     extendFun();  ,              
     //extendFun()  。    A         。
     manager.extendFun();
     }   
}
public class Test
{
      public static void main(String args[])
    {
          B b=new B();
         //            Manager      
          SubA a=new SubA(b);
         a.a();//  a  
    }
}

みんなが理解しているかどうか分かりませんが、個人のレベルが限られているので、言語の表現がうまくいかないです.どうかお许しください!!!