創(chuàng)建模式之SimpleFactory——簡單工廠模式
1、簡介簡單工廠模式是一個(gè)對(duì)象創(chuàng)建型模式,它定義了一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類決定實(shí)例化哪一個(gè)類,它使得一個(gè)類的實(shí)例化延遲到了子類。
2、使用場景
為什么要使用工廠模式,它能幫助解決什么問題?面向?qū)ο蟮姆庋b(Encapsulation)和分派(Delegation)告訴我們,盡量將長的代碼分派“切割”成每段,將每段再“封裝”起來(減少段和段之間偶合聯(lián)系性),這樣就會(huì)將風(fēng)險(xiǎn)分散,以后如果需要修改,只要更改每段,不會(huì)再發(fā)生牽一動(dòng)百的事情了。使用工廠模式,能夠?qū)?chuàng)建實(shí)例和使用實(shí)例分開,封裝了使用者將得到那些具體類的信息,并且隱藏了這些類的實(shí)例是如何被創(chuàng)建和放在一起的。
3、類圖

4、實(shí)例
先看看Product接口:
package simpleFactory;
public interface Product {
public void doSth();
}
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");
}
}
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;
}
}
}
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)缺點(diǎn)
優(yōu)點(diǎn)如下:
客戶類和工廠類分開。消費(fèi)者任何時(shí)候需要某種產(chǎn)品,只需向工廠請(qǐng)求即可。消費(fèi)者無須修改就可以接納新產(chǎn)品。
缺點(diǎn)也很明顯:
當(dāng)產(chǎn)品修改時(shí),工廠類也要做相應(yīng)的修改。有點(diǎn)違背了開—閉原則。
posted on 2008-05-13 16:36 云淡風(fēng)清 閱讀(1518) 評(píng)論(1) 編輯 收藏 所屬分類: Design Patterns