设计模式(一)---简单工厂模式
1,簡(jiǎn)介:簡(jiǎn)單工廠模式,又稱為靜態(tài)工廠模式,是通過專門定義一個(gè)類來負(fù)責(zé)創(chuàng)建其他類的實(shí)例,被創(chuàng)建的實(shí)例通常都具有共同的父類。
2,簡(jiǎn)單工廠模式的結(jié)構(gòu)
2.1:簡(jiǎn)單工廠的通用結(jié)構(gòu)
2.2:示意性實(shí)現(xiàn)
2.3:從上圖可以看出,簡(jiǎn)單工廠模式就是由一個(gè)工廠類根據(jù)傳入的參數(shù)來決定創(chuàng)建哪個(gè)產(chǎn)品的實(shí)例
簡(jiǎn)單工廠模式涉及到工廠角色,抽象產(chǎn)品角色,以及具體產(chǎn)品角色等三個(gè)角色
2.3.1:工廠類角色:這個(gè)工廠類是簡(jiǎn)單工廠模式的核心,含有與應(yīng)用相關(guān)的業(yè)務(wù)邏輯,工廠類在客戶端的直接調(diào)用下創(chuàng)建產(chǎn)品對(duì)象,由一個(gè)具體的java類來實(shí)現(xiàn)
2.3.2:抽象產(chǎn)品角色:擔(dān)任這個(gè)角色的類是由工廠模式創(chuàng)建的對(duì)象的父類,或者是它們共同擁有的接口,抽象產(chǎn)品角色可以用一個(gè)java接口或者是抽象類來實(shí)現(xiàn)
2.3.3:具體產(chǎn)品角色:工廠模式創(chuàng)建的對(duì)象,都是這個(gè)角色的實(shí)例,具體產(chǎn)品角色由一個(gè)具體的java類來實(shí)現(xiàn)
2.4:源代碼
2.4.1:新建一個(gè)食物類的接口。
package SimpleFactory;/*** ******************************************************** * @ClassName: Food * @Description: 食物接口* ***********************************************************/ public interface Food {public void say(); }2.4.2:建立兩個(gè)具體產(chǎn)品類 ?實(shí)現(xiàn)食物接口
1:薯?xiàng)l類
package SimpleFactory; /*** ******************************************************** * @ClassName: Chips * @Description: 薯?xiàng)l實(shí)體類 實(shí)現(xiàn)食品接口 * ***********************************************************/ public class Chips implements Food{@Overridepublic void say(){System.out.println("我是薯?xiàng)l");} }2:麥香雞類
package SimpleFactory; /*** ******************************************************** * @ClassName: McChicken * @Description: 麥香雞實(shí)現(xiàn)類 實(shí)現(xiàn)食品接口 * ***********************************************************/ public class McChicken implements Food{@Overridepublic void say() {System.out.println("我是麥香雞");} }2.4.3:創(chuàng)建工廠類
package SimpleFactory; /*** ******************************************************** * @ClassName: SimpleFacory * @Description: 簡(jiǎn)單工廠模式工廠類,根據(jù)傳過來的參數(shù)確定需要實(shí)例化的對(duì)象 * 返回實(shí)現(xiàn)類的父類類型 * ***********************************************************/ public class FoodFacory {public static Food getFood(String type){if(type.equalsIgnoreCase("Chips")){return new Chips();}else if(type.equalsIgnoreCase("McChicken")){return new McChicken();}else{System.out.println("沒有可以實(shí)例化的對(duì)象");return null;}} }2.4.4:創(chuàng)建測(cè)試類
package SimpleFactory; /*** ******************************************************** * @ClassName: SimpleFactoryTest * @Description: 簡(jiǎn)單工廠模式測(cè)試類 * ***********************************************************/ public class SimpleFactoryTest {public static void main(String[] args){//實(shí)例化Chips chips = (Chips) FoodFacory.getFood("Chips");McChicken chicken = (McChicken) FoodFacory.getFood("McChicken");chips.say();chicken.say();} }2.4.5:運(yùn)行測(cè)試類,得到如下結(jié)果
3:總結(jié)
3.1:優(yōu)點(diǎn):簡(jiǎn)單工廠模式的核心是工廠類,這個(gè)類含有必要的判斷邏輯,可以決定在什么時(shí)候創(chuàng)建產(chǎn)品類的實(shí)例,而客戶端可以直接調(diào)用工廠類來創(chuàng)建實(shí)例,從而免除直接創(chuàng)建實(shí)例的責(zé)任,簡(jiǎn)單工廠模式通過這種方式實(shí)現(xiàn)了對(duì)實(shí)例化責(zé)任的分割。
3.2:缺點(diǎn)1,將所有的實(shí)例化責(zé)任放在一個(gè)工廠類里面,如果工廠類不法正常工作,則整個(gè)系統(tǒng)崩潰。
?2,而在系統(tǒng)的后續(xù)擴(kuò)展中,都需要修改工廠類,擴(kuò)展較為困難。
?3,由于工廠類使用靜態(tài)方法作為工廠類,而靜態(tài)方法無法被子類繼承,因此,工廠角色無法形成繼承的等級(jí)結(jié)構(gòu)。
轉(zhuǎn)載于:https://www.cnblogs.com/shun-gege/p/7451048.html
總結(jié)
以上是生活随笔為你收集整理的设计模式(一)---简单工厂模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到自己的妈妈出轨是什么意思
- 下一篇: 梦到好几个坟头什么意思