簡單工廠模式
基本定義:
簡單工廠模式又稱之為靜態(tài)工廠方法失尖,屬于創(chuàng)建型模式较剃。在簡單工廠模式中眉孩,可以根據(jù)傳遞的參數(shù)不同个绍,返回不同類的實(shí)例。簡單工廠模式定義了一個(gè)類浪汪,這個(gè)類專門用于創(chuàng)建其他類的實(shí)例巴柿,這些被創(chuàng)建的類都有一個(gè)共同的父類。
模式結(jié)構(gòu):
1. Factory:工廠角色死遭。專門用于創(chuàng)建實(shí)例類的工廠广恢,提供一個(gè)方法,該方法根據(jù)傳遞的參數(shù)不同返回不同類的具體實(shí)例呀潭。
2. Product:抽象產(chǎn)品角色钉迷。為所有產(chǎn)品的父類。
3. ConcreteProduct:具體的產(chǎn)品角色蜗侈。
代碼實(shí)現(xiàn):
1篷牌、Product 抽象產(chǎn)品類
···
/*** @Description Product 抽象產(chǎn)品類
* @Author yanyuan
* @Date 18:27 2020/4/14
* @Version 1.0
**/publicinterface Phone {void make();void call();
}
···
2、Concrete Product 具體產(chǎn)品類
···
import lombok.extern.slf4j.Slf4j;/*** @Description 華為手機(jī)
* @Author yanyuan
* @Date 18:30 2020/4/14
* @Version 1.0
**/@Slf4jpublicclassHuaweiPhoneimplements Phone {
@Overridepublicvoid make() {
log.info("華為手機(jī)制作完成");
}
@Overridepublicvoid call() {
log.info("華為手機(jī)撥打電話");
}
}
···
···
/*** @Description Concrete Product 具體產(chǎn)品類
* @Author yanyuan
* @Date 18:28 2020/4/14
* @Version 1.0
**/@Slf4jpublicclassIPhoneimplements Phone{
@Overridepublicvoid make() {
log.info("制作iPhone手機(jī)");
}
@Overridepublicvoid call() {
log.info("iPhone手機(jī)撥打電話");
}
}
···
3踏幻、Factory 工廠角色類
···
import lombok.extern.slf4j.Slf4j;/*** @Description Factory 工廠角色類
* @Author yanyuan
* @Date 22:06 2020/4/14
* @Version 1.0
**/@Slf4jpublicclass SimpleFactory {public Phone createPhone(String brand){
Phone phone =null;switch (brand){case"HUAWEI":
phone =new HuaweiPhone();break;case"IPHONE":
phone =new IPhone();break;default:
log.error("暫不支持該品牌手機(jī)");break;
}return phone;
}
}
···
4枷颊、測試類
···
/*** @Description 簡單工廠模式測試類
* @Author yanyuan
* @Date 22:10 2020/4/14
* @Version 1.0
**/publicclass Test {publicstaticvoid main(String[] args) {
SimpleFactory factory =new SimpleFactory();
Phone huaweiPhone = factory.createPhone("HUAWEI");
huaweiPhone.make();
huaweiPhone.call();
Phone iPhone = factory.createPhone("IPHONE");
iPhone.make();
iPhone.call();
}
}
···
輸出結(jié)果
22:16:19.325 [main] INFO com.yanyuan.gof.build.simpleFactory.v2.HuaweiPhone - 華為手機(jī)制作完成
22:16:19.343 [main] INFO com.yanyuan.gof.build.simpleFactory.v2.HuaweiPhone - 華為手機(jī)撥打電話
22:16:19.344 [main] INFO com.yanyuan.gof.build.simpleFactory.v2.IPhone - 制作iPhone手機(jī)
22:16:19.344 [main] INFO com.yanyuan.gof.build.simpleFactory.v2.IPhone - iPhone手機(jī)撥打電話
優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
實(shí)現(xiàn)了對責(zé)任的分隔,提供了專門工廠類創(chuàng)建對象该面。
用戶無需知道具體產(chǎn)品名夭苗。
通過配置文件方式,可以在不修改客戶端(消費(fèi)端)代碼情況下變更/增加新產(chǎn)品隔缀,在一定程序上提高了系統(tǒng)的靈活性题造。
缺點(diǎn)
由于工廠類集中了所以產(chǎn)品創(chuàng)建邏輯,一旦不能正常工作猾瘸,整個(gè)系統(tǒng)受影響界赔。
使用簡單工廠模式將增加系統(tǒng)類的個(gè)數(shù)丢习,在一定程度上增加了系統(tǒng)的復(fù)雜度和理解。
系統(tǒng)擴(kuò)展困難淮悼,一旦添加了新產(chǎn)品就不得不修改工廠邏輯咐低,在產(chǎn)品類型較多時(shí),有可能造成工廠邏輯過于復(fù)雜袜腥,不利于系統(tǒng)的擴(kuò)展和維護(hù)见擦。
總結(jié)
簡單工廠模式的要點(diǎn)就在于當(dāng)你需要什么,只需要知道正確參數(shù)羹令,就可以獲取你所需要的對象鲤屡,無需知道其創(chuàng)建細(xì)節(jié)。
簡單工廠模式最大的優(yōu)點(diǎn)在于實(shí)現(xiàn)對象的創(chuàng)建和對象的分離福侈,但是如果產(chǎn)品過多時(shí)酒来,會導(dǎo)致工廠代碼復(fù)雜。