1、簡介
簡單工廠模式是一個對象創(chuàng)建型模式,它定義了一個用于創(chuàng)建對象的接口,讓子類決定實例化哪一個類,它使得一個類的實例化延遲到了子類。
2、使用場景
為什么要使用工廠模式,它能幫助解決什么問題?面向?qū)ο蟮姆庋b(Encapsulation)和分派(Delegation)告訴我們,盡量將長的代碼分派“切割”成每段,將每段再“封裝”起來(減少段和段之間偶合聯(lián)系性),這樣就會將風(fēng)險分散,以后如果需要修改,只要更改每段,不會再發(fā)生牽一動百的事情了。使用工廠模式,能夠?qū)?chuàng)建實例和使用實例分開,封裝了使用者將得到那些具體類的信息,并且隱藏了這些類的實例是如何被創(chuàng)建和放在一起的。
3、類圖
4、實例
先看看Product接口:
package simpleFactory;
public interface Product {
public void doSth();
}
再看看和他關(guān)聯(lián)的具體的類:
package simpleFactory;
public class ConcreteProduct1 implements Product {
public void doSth(){
System.out.print("this is product1");
}
}
package simpleFactory;
public class ConcreteProduct2 implements Product {
public void doSth(){
System.out.print("this is product2");
}
}
package simpleFactory;
public class ConcreteProduct3 implements Product {
public void doSth(){
System.out.print("this is product3");
}
}
package simpleFactory;
public class ConcreteProduct4 implements Product {
public void doSth(){
System.out.print("this is product4");
}
}
最后是工廠方法的核心類:
package simpleFactory;
public class Creator {
public static Product productFactory(int which) {
switch(which){
case 1:
return new ConcreteProduct1();
break;
case 2:
return new ConcreteProduct2();
break;
case 3:
return new ConcreteProduct3();
break;
case 4:
return new ConcreteProduct4();
break;
default:
return null;
}
}
}
5、優(yōu)缺點
優(yōu)點如下:
客戶類和工廠類分開。消費者任何時候需要某種產(chǎn)品,只需向工廠請求即可。消費者無須修改就可以接納新產(chǎn)品。
缺點也很明顯:
當(dāng)產(chǎn)品修改時,工廠類也要做相應(yīng)的修改。有點違背了開—閉原則。