Android設(shè)計(jì)模式-抽象工廠模式

UML關(guān)系簡(jiǎn)單介紹
UML簡(jiǎn)單使用的介紹
創(chuàng)建型設(shè)計(jì)模式
Android設(shè)計(jì)模式-單例模式
Android設(shè)計(jì)模式-工廠模式
Android設(shè)計(jì)模式-抽象工廠模式
Android設(shè)計(jì)模式-建造者模式
Android設(shè)計(jì)模式-原型模式
結(jié)構(gòu)型設(shè)計(jì)模式
Android設(shè)計(jì)模式-代理模式
Android設(shè)計(jì)模式-裝飾模式
Android設(shè)計(jì)模式-適配器模式
Android設(shè)計(jì)模式-組合模式
Android設(shè)計(jì)模式-門面模式
Android設(shè)計(jì)模式-橋接模式
Android設(shè)計(jì)模式-享元模式
行為型設(shè)計(jì)模式
Android設(shè)計(jì)模式-策略模式
Android設(shè)計(jì)模式-命令模式
Android設(shè)計(jì)模式-責(zé)任鏈模式
Android設(shè)計(jì)模式-模版方法模式
Android設(shè)計(jì)模式-迭代器模式
Android設(shè)計(jì)模式-觀察者模式
Android設(shè)計(jì)模式-備忘錄模式
Android設(shè)計(jì)模式-中介者模式
Android設(shè)計(jì)模式-訪問者模式
Android設(shè)計(jì)模式-狀態(tài)模式
Android設(shè)計(jì)模式-解釋器模式

1.定義

為創(chuàng)建一組相關(guān)或者相互依賴的對(duì)象提供一個(gè)接口柿究,而且無需指定他們的具體實(shí)現(xiàn)類

2.抽象工廠模式UML圖

抽象工廠UML圖

角色介紹

  • client 客戶端,調(diào)用場(chǎng)景
  • AbstractFactory 抽象工廠類
  • ConcreteFactory 具體工廠類
  • AbstractProduct 抽象產(chǎn)品類
  • ConcreteProduct 具體產(chǎn)品類

3.實(shí)現(xiàn)

舉例說明:一個(gè)抽象工廠,有兩個(gè)具體的實(shí)現(xiàn),分別為Factory1和Factory2覆积,分別生產(chǎn)數(shù)字為1和為2的產(chǎn)品

3.1抽象工程類

public abstract class AbstractFactory {
    public abstract AbstractProductA createA();
    public abstract AbstractProductB createB();
}

3.2具體工廠類

public class Factory1 extends AbstractFactory {
    //1工廠生產(chǎn)產(chǎn)品為1的產(chǎn)品
    @Override
    public AbstractProductA createA() {
        return new ProductA1();
    }
    //1工廠生產(chǎn)產(chǎn)品為1的產(chǎn)品
    @Override
    public AbstractProductB createB() {
        return new ProductB1();
    }
}

public class Factory2 extends AbstractFactory {
    //2工廠生產(chǎn)產(chǎn)品為2的產(chǎn)品
    @Override
    public AbstractProductA createA() {
        return new ProductA2();
    }
    //2工廠生產(chǎn)產(chǎn)品為2的產(chǎn)品
    @Override
    public AbstractProductB createB() {
        return new ProductB2();
    }
}

3.3抽象產(chǎn)品類

public abstract class AbstractProductA {
    //產(chǎn)品共有的方法
    public void a1(){

    }
    //每個(gè)產(chǎn)品不同的實(shí)現(xiàn)
    public abstract void a2();
}

public abstract class AbstractProductB {
    //產(chǎn)品共有的方法
    public void b1(){

    }
    //每個(gè)產(chǎn)品不同的實(shí)現(xiàn)
    public abstract void b2();
}

3.4 具體產(chǎn)品

public class ProductA1 extends AbstractProductA {
    @Override
    public void a2() {
        System.out.println("我是產(chǎn)品A1");
    }
}

public class ProductA2 extends AbstractProductA {
    @Override
    public void a2() {
        System.out.println("我是產(chǎn)品A2");
    }
}

public class ProductB1 extends AbstractProductB {
    @Override
    public void b2() {
        System.out.println("我是產(chǎn)品B1");
    }
}

public class ProductB2 extends AbstractProductB {
    @Override
    public void b2() {
        System.out.println("我是產(chǎn)品B2");
    }
}

3.5場(chǎng)景調(diào)用

public class MyClass {
    public static void main(String args[]) {
        AbstractFactory factory1=new Factory1();
        AbstractFactory factory2=new Factory2();

        AbstractProductA a1=factory1.createA();
        AbstractProductA a2=factory2.createA();

        AbstractProductB b1=factory1.createB();
        AbstractProductB b2=factory2.createB();

        a1.a2();
        a2.a2();

        b1.b2();
        b2.b2();
    }
}

//打印結(jié)果
我是產(chǎn)品A1
我是產(chǎn)品A2
我是產(chǎn)品B1
我是產(chǎn)品B2

4.總結(jié)

  • 抽象工廠模式有良好的封裝性,但是擴(kuò)展性卻很差仇冯,如以上的例子柠掂,如果要增加一個(gè)C產(chǎn)品,那么抽象工廠和具體工廠都需要修改颗胡。但是如果只是增加一個(gè)產(chǎn)品等級(jí)3,那么只需要增加一個(gè)具體工廠和產(chǎn)品類即可邓嘹,也就是說橫向擴(kuò)展容易,縱向擴(kuò)展難崭篡,但是橫向縱向的設(shè)定咱扣,還是看自己設(shè)計(jì)了厅克,你完全可以將產(chǎn)品等級(jí)設(shè)計(jì)為縱向,產(chǎn)品類型設(shè)計(jì)為橫向痘拆,結(jié)果也就反了過來,所以具體設(shè)計(jì)的時(shí)候,要想清楚了。
  • 使用場(chǎng)景:一個(gè)對(duì)象族(或是一組沒有任何關(guān)系的對(duì)象)都有相同的約束,則可以使用抽象工廠模式晾捏。
  • 工廠模式與抽象工廠模式的區(qū)別箫锤,簡(jiǎn)單來說,就相當(dāng)于工廠模式是只有一條生產(chǎn)線的工廠塑崖,而抽象工廠模式是具有多條生產(chǎn)線的工廠蝉稳。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市伸蚯,隨后出現(xiàn)的幾起案子摇幻,更是在濱河造成了極大的恐慌,老刑警劉巖挥萌,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绰姻,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡引瀑,警方通過查閱死者的電腦和手機(jī)狂芋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來憨栽,“玉大人帜矾,你說我怎么就攤上這事⌒既幔” “怎么了屡萤?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)掸宛。 經(jīng)常有香客問我死陆,道長(zhǎng),這世上最難降的妖魔是什么唧瘾? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任翔曲,我火速辦了婚禮,結(jié)果婚禮上劈愚,老公的妹妹穿的比我還像新娘瞳遍。我一直安慰自己,他們只是感情好菌羽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布掠械。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪猾蒂。 梳的紋絲不亂的頭發(fā)上均唉,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音肚菠,去河邊找鬼舔箭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蚊逢,可吹牛的內(nèi)容都是我干的层扶。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼烙荷,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼镜会!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起终抽,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤戳表,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后昼伴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體匾旭,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年圃郊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了季率。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡描沟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鞭光,到底是詐尸還是另有隱情吏廉,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布惰许,位于F島的核電站席覆,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏汹买。R本人自食惡果不足惜佩伤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望晦毙。 院中可真熱鬧生巡,春花似錦、人聲如沸见妒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至盐股,卻和暖如春钱豁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背疯汁。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國(guó)打工牲尺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人幌蚊。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓谤碳,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親霹肝。 傳聞我的和親對(duì)象是個(gè)殘疾皇子估蹄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容