Java?設(shè)計模式以虹貓藍兔的故事講解簡單工廠模式
專欄介紹
本系列專欄會以虹貓藍兔七俠傳的故事為例來給大家詳細分析所有模式,希望能給大家?guī)韼椭?/p>
本期介紹
模式: 簡單工廠模式
案例: 一個天外隕石(抽象產(chǎn)品),三把劍(產(chǎn)品),
一個鑄劍師(工廠)。
虹貓藍兔莎莉分別找鑄劍師造了三把劍。
什么是簡單工廠模式
工廠模式的定義: 定義一個創(chuàng)建產(chǎn)品對象的工廠接口,將產(chǎn)品對象的實際創(chuàng)建工作推遲到具體子工廠類當中。這滿足創(chuàng)建型模式中所要求的“創(chuàng)建與使用相分離”的特點。
1、按實際業(yè)務場景劃分,工廠模式有 3 種不同的實現(xiàn)方式,分別是簡單工廠模式、工廠方法模式和抽象工廠模式。
2、我們把被創(chuàng)建的對象稱為“產(chǎn)品”,把創(chuàng)建產(chǎn)品的對象稱為“工廠”。如果要創(chuàng)建的產(chǎn)品不多,只要一個工廠類就可以完成,這種模式叫“簡單工廠模式”。
優(yōu)點
1、工廠類包含必要的邏輯判斷,可以決定在什么時候創(chuàng)建哪一個產(chǎn)品的實例。客戶端可以免除直接創(chuàng)建產(chǎn)品對象的職責,很方便的創(chuàng)建出相應的產(chǎn)品。工廠和產(chǎn)品的職責區(qū)分明確。
2、客戶端無需知道所創(chuàng)建具體產(chǎn)品的類名,只需知道參數(shù)即可。
3、也可以引入配置文件,在不修改客戶端代碼的情況下更換和添加新的具體產(chǎn)品類。
缺點
1、簡單工廠模式的工廠類單一,負責所有產(chǎn)品的創(chuàng)建,職責過重,一旦異常,整個系統(tǒng)將受影響。且工廠類代碼會非常臃腫,違背高聚合原則。
2、使用簡單工廠模式會增加系統(tǒng)中類的個數(shù)(引入新的工廠類),增加系統(tǒng)的復雜度和理解難度
3、系統(tǒng)擴展困難,一旦增加新產(chǎn)品不得不修改工廠邏輯,在產(chǎn)品類型較多時,可能造成邏輯過于復雜
4、簡單工廠模式使用了 static 工廠方法,造成工廠角色無法形成基于繼承的等級結(jié)構(gòu)。
應用場景
對于產(chǎn)品種類相對較少的情況,考慮使用簡單工廠模式。使用簡單工廠模式的客戶端只需要傳入工廠類的參數(shù),不需要關(guān)心如何創(chuàng)建對象的邏輯,可以很方便地創(chuàng)建所需產(chǎn)品。
簡單工廠的實現(xiàn)
案例的主要角色如下:
工廠(SimpleFactory):鑄劍師
抽象產(chǎn)品(Product):天外隕石(鑄劍的原材料)
具體產(chǎn)品(ConcreteProduct):長虹劍、冰魄劍、紫云劍
案例: 虹貓藍兔莎莉分別找鑄劍師打造三把劍,長虹劍、冰魄劍、紫云劍。鑄劍師利用原材料天外隕石來鑄造這三把劍。
Ss接口(天外隕石):
接口內(nèi)聲明了一個方法
public interface Ss {
void show();
}
Aa類實現(xiàn)接口Ss(長虹劍):
實現(xiàn)Ss接口
public class Aa implements Ss {
@Override
public void show() {
System.out.println("打造了一把長虹劍");
}
}
Bb類實現(xiàn)接口Ss(冰魄劍):
實現(xiàn)Ss接口
public class Bb implements Ss {
@Override
public void show() {
System.out.println("打造了一把冰魄劍");
}
}
Cc類實現(xiàn)接口Ss(紫云劍):
實現(xiàn)Ss接口
public class Cc implements Ss {
@Override
public void show() {
System.out.println("打造了一把紫云劍");
}
}
Zz類(鑄劍師):
聲明一個Ss類型屬性,聲明一個abc方法,用來判斷需要造哪把劍,返回一把劍對象。
public class Zz {
private static Ss ss;
public Ss abc(String a) {
if ("長虹劍".equals(a)) {
ss = new Aa();
} else if ("冰魄劍".equals(a)) {
ss = new Bb();
} else if ("紫云劍".equals(a)) {
ss = new Cc();
} else {
System.out.println("鑄劍失敗");
}
return ss;
}
}
Demo測試類:
new一個鑄劍師(工廠對象),調(diào)用鑄劍師的方法傳入需要造的劍,返回一個劍的對象,然后調(diào)用劍對象中的方法看看造的對不對。
public class Demo {
public static void main(String[] args) {
Zz zz = new Zz();
Ss aa = zz.abc("長虹劍");
aa.show();
Ss bb = zz.abc("冰魄劍");
bb.show();
Ss cc = zz.abc("紫云劍");
cc.show();
Ss dd = zz.abc("aa");
}
}

下期預告
模式: 普通工廠模式
案例: 七俠找鑄劍師夫婦造劍
敬請期待
到此這篇關(guān)于Java?設(shè)計模式以虹貓藍兔的故事講解簡單工廠模式的文章就介紹到這了,更多相關(guān)Java 簡單工廠模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java實現(xiàn)浮點數(shù)轉(zhuǎn)人民幣的小例子
java實現(xiàn)浮點數(shù)轉(zhuǎn)人民幣的小例子,需要的朋友可以參考一下2013-03-03
Java基礎(chǔ)入門篇之邏輯控制練習題與猜數(shù)字游戲
猜數(shù)字游戲是一款經(jīng)典的游戲,該游戲說簡單也很簡單,說不簡單確實也很難,這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)入門篇之邏輯控制練習題與猜數(shù)字游戲的相關(guān)資料,需要的朋友可以參考下2023-06-06
Java+MySql圖片數(shù)據(jù)保存與讀取的具體實例
之前一直沒有做過涉及到圖片存儲的應用,最近要做的東東涉及到了這個點,就做了一個小的例子算是對圖片存儲的初試吧2013-06-06

