Java設計モードの一方向アダプタモード
通常、2つの互いに関連しないクラスがあれば、このような問題に直面します.
問題は、Aクラスのメソッドa()を呼び出すと同時にBクラスのb()メソッドを呼び出さなければならない場合、ソースコードを変更しない場合、どのように実現しますか?
実はこのような問題を解決する方法はたくさんあって、私たちは実際の状況でもよく出会って、私の方法はアダプタモードを利用して解決します!
1つ目の方法:
新しいクラスSubA継承Aを定義し、私たちが呼び出すときに直接Aクラスのサブクラス(すなわちSubA)を呼び出します.コードは以下の通りです.
お客様のニーズに変更があれば、「表情を加える」機能が必要であることに気づきましたか?SubAクラスaメソッドのコードを変更する必要がありますか?コードを変更してはいけないと言っているのではないでしょうか.どうすればいいの?頭が痛い...幸い.....Javaにはインタフェースがありますか?インタフェースを利用してこのような機能を実現することができます.
2つ目の方法:
追加する機能をインタフェースに抽象化します.こんな感じで
extendFun()メソッドは、お客様が必要とする「機能の定義」です.インタフェースは実装する必要があるため、次のクラスを定義します.
みんなが理解しているかどうか分かりませんが、個人のレベルが限られているので、言語の表現がうまくいかないです.どうかお许しください!!!
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
}
}
みんなが理解しているかどうか分かりませんが、個人のレベルが限られているので、言語の表現がうまくいかないです.どうかお许しください!!!