public A(){
this.b=new B();this.c=new C();
}……
public B(){
this.d=new D();
}
public C(){
this.e=new E();this.f=new F();
}
A a=new A();a.service();
Class A {java
//B b;spring
D d;數據庫
C c;框架
public void service(){ide
Assert d!=null;this
Assert c!= null;spa
....orm
}對象
}接口
請修改問題1中的代碼,使A可以正常初始化。
參考答案:
public A(){
this.d=new D();this.c=new C();
}……
A a=new A();a.service();
Class A {
D d;
C c;
G g;
public void service(){
Assert d!=null;
Assert c!= null;
....
}
public void service_2(){
Assert g!= null;
……
}
}
請修改問題2中的代碼,以適應新的需求。
參考答案:
public A(D _d, C _c){
this.d=_d;this.c=_c;
}
public A(G _g){
this.g=_g;
}
……
A a=new A(new D(),new C());
a.service();
A a_2=new A(new G());
a.service_2();
private static A a=new A(new D(),new C());private static A a_2=new A(new G());
public static A getA(){
return a;
}
public static A getA_2(){
return a_2;
}
private A(D _d, C _c){
this.d=_d;this.c=_c;
}
private A(G _g){this.g=_g;}……
A a=A.getA();
a.service();
A a_2=A.getA_2();
a.service_2();
Public abstract class Factory {
Public static Factory aFactory(){
Return new FactoryA ();
}
Public static Factory a2Factory(){
Return new FactoryA_2();
}
Create();
}
Public class FactoryA implements Factory {
@Override
Public A Create(){
return new A(new D(),new C());
}
}
Public class FactoryA_2 implements Factory {
@Override
Public A Create(){
return new A_2(new G());
}
}
……
調用代碼:
A a = Factory.aFactory().Create();
a.service();
A a_2 = Factory.a2Factory().Create();
a_2.service_2();
問題六、將service()和service_2()方法提取到接口中,再修改問題5中的代碼。
參考答案:略
問題七、用問題6的思路,爲其它類(B/C/D/E/F/G)等建立工廠
參考答案:略
問題7的出現帶來了一個新的困擾:那麼多的類,要寫那麼多的工廠……尤爲是,當咱們對現有系統進行改造或者重構時,這種重複工做量會有多少,可想而知。
問題8:爲了簡化問題7的工做,公司定義了一個通用的工廠類
public Class Factory{
/**
* 根據入參,調用指定類的默認構造方法(無參數構造方法),生成一個指定的類的實例。若是找不到指定的類,或者指定的類沒有可用的構造方法,則返回null。
* <p />
* 例如,調用
* String a = Factory.product(「java.lang.String」),將返回一個」」。等同於調用了 String a = new String();
*
* @param className 用戶指定的類名。必須是全路徑名,
* @return 用戶指定的類的一個實例,或者是null
*/
public static Object product(String className){
①
}
}
請將①處的代碼補充完整。
這裏就須要用到java的反射機制了。
綜合上述問題,思考一下:爲何會出現Spring IOC框架?它的基本原理是什麼?
最簡單的說,IOC出現的緣由就是爲了解耦合。利用一個通用的工廠,來管理各個實現類的建立過程以及在建立過程當中引入的類的依賴關係。這樣,各個類在代碼層級上,是能夠作到「兵不知將將不知兵」的,從而減小對類進行修改、擴展時的工做量。
它的基本原理,很明瞭,就是反射+工廠。