《設(shè)計(jì)模式之禪》讀書筆記-2.3-抽象工廠模式

2.3 抽象工廠模式

定義:

Provide an interface for creating famillies of related or dependent objects without specifying their concreate classes.
為創(chuàng)建一組相關(guān)或相互依賴的對(duì)象提供一個(gè)接口躬厌,而且無(wú)須指定它們的具體類亮瓷。

優(yōu)點(diǎn):

  1. 封裝性,每個(gè)產(chǎn)品的實(shí)現(xiàn)類不是高層模塊要關(guān)心的
  2. 產(chǎn)品族內(nèi)的約束為非公開狀態(tài)渣淳。ex:生產(chǎn)左右車門的比例

缺點(diǎn):

  1. 產(chǎn)品族擴(kuò)展非常困難征唬。ex:增加產(chǎn)品C礁扮,抽象工廠AbstractCreator 要增加 createProductC()忿偷,具體工廠Creator1和Creator2 都需要修改蛉威。

ex:違反了開閉原則材蛛。抽象類和接口是一個(gè)契約圆到,改變契約,所有與契約有關(guān)的代碼都要改卑吭。

使用場(chǎng)景:

一個(gè)對(duì)象(或者是一組沒有任何關(guān)系的對(duì)象)都有相同的約束芽淡,則可以使用工廠模式。

ex:文本編輯器和圖片查看器豆赏,在linux和windows上功能相同挣菲,代碼實(shí)現(xiàn)不同。
兩者的共同約束:操作系統(tǒng)類型掷邦。
可以采用抽象工廠模式產(chǎn)生不同操作系統(tǒng)下的軟件白胀。

注意:

產(chǎn)品等級(jí)的擴(kuò)展容易:增加一個(gè)產(chǎn)品等級(jí),只要增加一個(gè)工廠負(fù)責(zé)新任務(wù)即可抚岗,符合開閉原則或杠。

總結(jié):

產(chǎn)品層級(jí)-產(chǎn)品等級(jí):縱向,車型號(hào)宣蔚,人膚色向抢。難擴(kuò)展
產(chǎn)品種類-產(chǎn)品族:橫向认境,車門,人性別挟鸠。易擴(kuò)展

代碼:

/**
 * *************************抽象產(chǎn)品類*********************** 
 */
abstract class AbstractProductA{
    //每個(gè)產(chǎn)品的共有方法 
    public void shareMethod(){}
    //每個(gè)產(chǎn)品相同方法叉信,不同實(shí)現(xiàn)
    public abstract void doSomething();
}

abstract class AbstractProductB{
    public void shareMethod(){}
    public abstract void doSomething();
}

/**
 * *************************具體產(chǎn)品類***********************
 */
class ProductA1 extends AbstractProductA{
    public void doSomething(){System.out.println("產(chǎn)品A1的實(shí)現(xiàn)方法");}
}

class ProductA2 extends AbstractProductA{
    public void doSomething(){System.out.println("產(chǎn)品A2的實(shí)現(xiàn)方法");}
}

class ProductB1 extends AbstractProductB{
    public void doSomething(){System.out.println("產(chǎn)品B1的實(shí)現(xiàn)方法");}
}

class ProductB2 extends AbstractProductB{
    public void doSomething(){System.out.println("產(chǎn)品B2的實(shí)現(xiàn)方法");}
}

/**
 * *************************抽象創(chuàng)建者***********************
 */
abstract class AbstractCreator{
    //有多少產(chǎn)品族(車型號(hào)),建多少個(gè)創(chuàng)建方法
    public abstract AbstractProductA createProductA();
    public abstract AbstractProductB createProuctB();
}

/**
 * *************************具體創(chuàng)建者***********************
 * 
 * 有多少產(chǎn)品等級(jí)(左右門)艘希,建多少創(chuàng)建者 
 */
class Creator1 extends AbstractCreator{
    @Override
    public AbstractProductA createProductA() {
        return new ProductA1();
    }
    @Override
    public AbstractProductB createProuctB() {
        return new ProductB1();
    }
}

class Creator2 extends AbstractCreator{
    @Override
    public AbstractProductA createProductA() {
        return new ProductA2();
    }
    @Override
    public AbstractProductB createProuctB() {
        return new ProductB2();
    }
}

/**
 * *************************場(chǎng)景類***********************
 * 場(chǎng)景類中的方法與具體實(shí)現(xiàn)類沒有關(guān)系
 * 場(chǎng)景類只需要知道一個(gè)產(chǎn)品的工廠方法就可以直接生產(chǎn)一個(gè)產(chǎn)品茉盏,無(wú)需關(guān)心具體實(shí)現(xiàn)
 */
class Client{
    public static void main(String[] args){
        AbstractCreator creator1 = new Creator1();
        AbstractCreator creator2 = new Creator2();
        
        AbstractProductA a1 = creator1.createProductA();
        AbstractProductB b1 = creator1.createProuctB();
        
        AbstractProductA a2 = creator2.createProductA();
        AbstractProductB b2 = creator2.createProuctB();
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市枢冤,隨后出現(xiàn)的幾起案子鸠姨,更是在濱河造成了極大的恐慌,老刑警劉巖淹真,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讶迁,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡核蘸,警方通過查閱死者的電腦和手機(jī)巍糯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)客扎,“玉大人祟峦,你說(shuō)我怎么就攤上這事♂阌悖” “怎么了宅楞?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)袱吆。 經(jīng)常有香客問我厌衙,道長(zhǎng),這世上最難降的妖魔是什么绞绒? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任婶希,我火速辦了婚禮,結(jié)果婚禮上蓬衡,老公的妹妹穿的比我還像新娘喻杈。我一直安慰自己,他們只是感情好狰晚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布筒饰。 她就那樣靜靜地躺著,像睡著了一般家肯。 火紅的嫁衣襯著肌膚如雪龄砰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音换棚,去河邊找鬼式镐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛固蚤,可吹牛的內(nèi)容都是我干的娘汞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼夕玩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼你弦!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起燎孟,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤禽作,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后揩页,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體旷偿,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年爆侣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了萍程。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡兔仰,死狀恐怖茫负,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情乎赴,我是刑警寧澤忍法,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站无虚,受9級(jí)特大地震影響缔赠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜友题,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望戴质。 院中可真熱鬧度宦,春花似錦、人聲如沸告匠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)后专。三九已至划鸽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背裸诽。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工嫂用, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人丈冬。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓嘱函,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親埂蕊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子往弓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

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