設(shè)計(jì)模式三十六計(jì)之簡(jiǎn)單工廠模式(Simple Factory)
解釋:工廠模式的目的在于當(dāng)實(shí)例化某個(gè)對(duì)象時(shí)毅厚,用戶不需要知道它的內(nèi)部細(xì)節(jié)鸦泳,只需要知道創(chuàng)建對(duì)象的入口(接口)
1. 結(jié)構(gòu)和原理
簡(jiǎn)單工廠模式的原理是把某些類的實(shí)例化工作交由一個(gè)獨(dú)立的類來完成壳快,這個(gè)獨(dú)立的類就稱為簡(jiǎn)單工廠類仑性,這種設(shè)計(jì)模式就是簡(jiǎn)單的工廠模式溅蛉。
在簡(jiǎn)單工廠模式中嫡意,讓簡(jiǎn)單工廠類來決定使用哪一個(gè)具體的子類來實(shí)例化當(dāng)前的對(duì)象,這樣做的好處客戶類(獲取對(duì)象的類)和子類(需要實(shí)例化的類)之間實(shí)現(xiàn)解耦合劳曹,客戶類不需要知道子類中的細(xì)節(jié)以及選擇哪一個(gè)類來實(shí)例化奴愉;當(dāng)子類發(fā)生改變時(shí),客戶類也不需要進(jìn)行任何的修改厚者,所有的繁雜工作都將由工廠類負(fù)責(zé)躁劣。
2. 實(shí)現(xiàn)簡(jiǎn)單的工廠模式
public interface Product{
public String doing();
}
public class Apple implements Product{
@Override
public String doing(){
return "iPhone X";
}
}
public class Huawei implements Product{
@Override
public String doing(){
return "P20 Pro"
}
}
public class OPPO implements Product{
@Override
public String doing(){
return "R17 Pro"
}
}
public class SimpleFactory{
public static final int APPLE = 1;
public static final int HUAWEI = 2;
public static final int OPPO = 3;
public Product createProduct(int type){
if(type == APPLE){
return new Apple();
}else if(type = HUAWEI){
return new Huawei();
}else{
return new OPPO();
}
}
}
public class Customer{
public static void main(String[] args){
SimpleFactory factory = new SimpleFactory();
Product phone1 = factory.createdProduct(SimpleFactory.APPLE);
Product phone2 = factory.createdProduct(SimpleFactory.HUAWEI);
Product phone3 = factory.createdProduct(SimpleFactory.OPPO);
System.out.println(phone1.doing());
System.out.println(phone2.doing());
System.out.println(phone3.doing());
}
}
控制臺(tái)輸出:
IPhone X
P20 Pro
R17 Pro
3. 總結(jié)
優(yōu)點(diǎn)
在簡(jiǎn)單工廠模式中迫吐,工廠類(SimpleFactory)是整個(gè)模式的關(guān)鍵库菲,它包含了必要的邏輯判斷,通過獲取外界給定的信息來決定應(yīng)該創(chuàng)建哪一個(gè)具體類的對(duì)象志膀。通過使用工廠模式熙宇,客戶端類可以創(chuàng)建具體的產(chǎn)品子類中解放出來,客戶端類只需要知道如何消費(fèi)
對(duì)象就可以了溉浙,而不必要去知道究竟是哪一個(gè)類實(shí)例化了以及該類的內(nèi)部細(xì)節(jié)是什么烫止。
缺點(diǎn)
簡(jiǎn)單工廠模式也存在它的缺陷,由于工程類(SimpleFactory)集中了所有類實(shí)例化對(duì)象的邏輯戳稽,違反了 高內(nèi)聚 的責(zé)任分配原則馆蠕,將全部創(chuàng)建邏輯集中到一個(gè)類中;它所能創(chuàng)建的類只能提前設(shè)置好惊奇,如果后續(xù)有新的子類加入互躬,則需要重新修改工廠類。
適用場(chǎng)景
- 工廠類負(fù)責(zé)實(shí)例化的對(duì)象較少的情況下
- 客戶端類只傳入工廠類的參數(shù)颂郎,而不需要干預(yù)產(chǎn)品子類實(shí)例化過程的情況下
- 由于簡(jiǎn)單工廠模式破壞了高內(nèi)聚責(zé)任分配原則吼渡,建議在小范圍內(nèi)使用
[原文鏈接:https://www.ramostear.com/articles/simple_factory.html