1、簡介
簡單工廠模式是一個對象創建型模式,它定義了一個用于創建對象的接口,讓子類決定實例化哪一個類,它使得一個類的實例化延遲到了子類。
2、使用場景
為什么要使用工廠模式,它能幫助解決什么問題?面向對象的封裝(Encapsulation)和分派(Delegation)告訴我們,盡量將長的代碼分派“切割”成每段,將每段再“封裝”起來(減少段和段之間偶合聯系性),這樣就會將風險分散,以后如果需要修改,只要更改每段,不會再發生牽一動百的事情了。使用工廠模式,能夠將創建實例和使用實例分開,封裝了使用者將得到那些具體類的信息,并且隱藏了這些類的實例是如何被創建和放在一起的。
3、類圖
4、實例
先看看Product接口:
package simpleFactory;
public interface Product {
public void doSth();
}
再看看和他關聯的具體的類:
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、優缺點
優點如下:
客戶類和工廠類分開。消費者任何時候需要某種產品,只需向工廠請求即可。消費者無須修改就可以接納新產品。
缺點也很明顯:
當產品修改時,工廠類也要做相應的修改。有點違背了開—閉原則。