工廠模式

怕是時間一久又搞混了簡單工廠模式、工廠方法模式和抽象工廠模式茵乱,還是輸出一下吧茂洒。這幾種模式說簡單,倒是真的不難瓶竭,就是自己怎么運用到平日項目中去督勺,這點讓我很是頭疼 。這篇文章我不會很細致地代碼UML圖相結合來介紹這幾種模式斤贰,如果是小白智哀,可以看這位四月葡萄
寫的Android的設計模式,可以說是很友好全面了荧恍,今天我主要就啰嗦兩句我覺得重要的點瓷叫,以便以后一看就記起。

(一)簡單工廠模式

優(yōu)點是代碼解耦送巡,創(chuàng)建實例的工作與使用實例的工作分開摹菠,使用者不必關心類對象如何創(chuàng)建。

簡單工廠模式有一個最大的問題——如果現在接口的子類增加了骗爆,那么工廠類肯定需要修改次氨,這樣違反了開閉原則(OCP)。因此可以使用反射來創(chuàng)建實例對象摘投。

packagecn.mldn.demo;
interface Fruit {
    public void eat() ;
}

class Apple implements Fruit {
    public void eat() {
        System.out.println("吃蘋果煮寡。");
    };
}

class Orange implements Fruit {
    public void eat() {
        System.out.println("吃橘子虹蓄。");
    };
}

class Factory {

    public static <T extends Fruit> T create(Class<T> clz) {
        Fruit f = null;
        try{
            //看這兒看這兒~反射出實例
            f = (Fruit) Class.forName(clz.getName()).newInstance() ;
        } catch(Exception e) {
            e.printStackTrace();
        }
        return (T)f ;
    }
}

public class FactoryDemo {
    public static void main(String[] args) {
        //調用方式
        Factory.create(Orange.class).eat();
        Factory.create(Apple.class).eat();
    }
}

利用反射后即使增加了接口的子類,工廠類照樣可以完成對象的實例化操作洲押,這個才是真正的工廠類武花,可以應對于所有的變化。但用反射的話杈帐,性能是一個問題体箕,反射相當于一系列解釋操作,通知jvm要做的事情挑童,性能比直接的java代碼要慢很多累铅。且不安全,通過反射機制我們能拿到類的私有成員站叼。

以前我對簡單工廠模式很有偏見娃兽,因為覺得它違反開閉原則的缺點實在是太明顯了。而在實際項目中我也會寫出缺點很明顯的代碼尽楔,很氣投储,但就是不知道怎么改進±觯或許我之前這么鄙視簡單工廠模式玛荞,其實是在鄙視寫臭臭代碼的自己呀。只能多學習多思考了呕寝。而且簡單工廠模式確實是有其優(yōu)點之處的呀勋眯,創(chuàng)建實例的工作與使用實例的工作分開~
參考:Java的反射機制

(二)工廠方法模式

沒什么值得說的,拷貝一個UML圖出來好了下梢。工廠方法模式每個工廠只能創(chuàng)建一種類型的產品客蹋。

工廠方法模式UML類圖
工廠方法模式有抽象工廠類,簡單工廠模式沒有抽象工廠類且其工廠類的工廠方法是靜態(tài)的孽江。

(三)抽象工廠模式

抽象工廠模式UML

其實大家看看這圖讶坯,很容易可以看出來如果增加新的產品,抽象工廠模式需要修改抽象工廠和所有的具體工廠,也違反了開閉原則。這就是抽象工廠模式的缺點了竟坛。

對比一下工廠方法模式和抽象工廠模式——

在工廠方法模式中具體工廠負責生產具體的產品闽巩,每一個具體工廠對應一種具體產品,工廠方法具有唯一性担汤。抽象工廠模式則可以能夠創(chuàng)建多種類型的產品涎跨,應用場景為生產多個產品組合的對象。抽象工廠模式代碼解耦崭歧,創(chuàng)建實例的工作與使用實例的工作分開隅很,使用者不必關心類對象如何創(chuàng)建。

溫故知新。工廠模式的初衷是解耦解耦解耦叔营,創(chuàng)建實例的工作與使用實例的工作分開屋彪,使用者不必關心類對象如何創(chuàng)建。

參考:
Android 設計模式之各種工廠方法模式

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末绒尊,一起剝皮案震驚了整個濱河市畜挥,隨后出現的幾起案子,更是在濱河造成了極大的恐慌婴谱,老刑警劉巖蟹但,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異谭羔,居然都是意外死亡华糖,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門瘟裸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來客叉,“玉大人,你說我怎么就攤上這事话告〖娌” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵沙郭,是天一觀的道長向族。 經常有香客問我,道長棠绘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任再扭,我火速辦了婚禮氧苍,結果婚禮上,老公的妹妹穿的比我還像新娘泛范。我一直安慰自己让虐,他們只是感情好,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布罢荡。 她就那樣靜靜地躺著赡突,像睡著了一般。 火紅的嫁衣襯著肌膚如雪区赵。 梳的紋絲不亂的頭發(fā)上惭缰,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天,我揣著相機與錄音笼才,去河邊找鬼漱受。 笑死,一個胖子當著我的面吹牛骡送,可吹牛的內容都是我干的昂羡。 我是一名探鬼主播絮记,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼虐先!你這毒婦竟也來了怨愤?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤蛹批,失蹤者是張志新(化名)和其女友劉穎撰洗,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體般眉,經...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡了赵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了甸赃。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柿汛。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖埠对,靈堂內的尸體忽然破棺而出络断,到底是詐尸還是另有隱情,我是刑警寧澤项玛,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布貌笨,位于F島的核電站,受9級特大地震影響襟沮,放射性物質發(fā)生泄漏锥惋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一开伏、第九天 我趴在偏房一處隱蔽的房頂上張望膀跌。 院中可真熱鬧,春花似錦固灵、人聲如沸捅伤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丛忆。三九已至,卻和暖如春仍秤,著一層夾襖步出監(jiān)牢的瞬間熄诡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工徒扶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留粮彤,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像导坟,于是被迫代替她去往敵國和親屿良。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內容