工廠模式

意圖:

定義一個(gè)創(chuàng)建對(duì)象的接口,讓其子類自己決定實(shí)例化哪一個(gè)工廠類原环,工廠模式使其創(chuàng)建過(guò)程延遲到子類進(jìn)行

主要解決:

主要解決接口選擇的問(wèn)題棒动。

何時(shí)使用:

我們明確地計(jì)劃不同條件下創(chuàng)建不同實(shí)例時(shí)恋博。

如何解決:

讓其子類實(shí)現(xiàn)工廠接口瘫絮,返回的也是一個(gè)抽象的產(chǎn)品涨冀。

關(guān)鍵代碼:

創(chuàng)建過(guò)程在其子類執(zhí)行。

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

  • 一個(gè)調(diào)用者想創(chuàng)建一個(gè)對(duì)象麦萤,只要知道其名稱就可以了鹿鳖。
  • 擴(kuò)展性高,如果想增加一個(gè)產(chǎn)品壮莹,只要擴(kuò)展一個(gè)工廠類就可以翅帜。
  • 屏蔽產(chǎn)品的具體實(shí)現(xiàn),調(diào)用者只關(guān)心產(chǎn)品的接口垛孔。

缺點(diǎn):

每次增加一個(gè)產(chǎn)品時(shí)藕甩,都需要增加一個(gè)具體類和對(duì)象實(shí)現(xiàn)工廠施敢,使得系統(tǒng)中類的個(gè)數(shù)成倍增加周荐,在一定程度上增加了系統(tǒng)的復(fù)雜度,同時(shí)也增加了系統(tǒng)具體類的依賴僵娃。這并不是什么好事

實(shí)現(xiàn):

Design:
我們將創(chuàng)建一個(gè) Shape 接口和實(shí)現(xiàn) Shape 接口的實(shí)體類概作。下一步是定義工廠類 ShapeFactory
FactoryPatternDemo默怨,我們的演示類使用 ShapeFactory 來(lái)獲取 Shape 對(duì)象讯榕。它將向 ShapeFactory 傳遞信息(CIRCLE / RECTANGLE / SQUARE),以便獲取它所需對(duì)象的類型。

工廠模式的 UML 圖

步驟:

  1. 創(chuàng)建一個(gè)接口:
    public interface Shape {
    void draw();
    }

  2. 創(chuàng)建實(shí)現(xiàn)接口的類:
    public class Circle implement Shape{
    @overide
    public void draw(){
    System.out.println("this is a Circle");
    }
    }

    public class Rectangle implement Shape{
       @overide
       public void draw(){
         System.out.println("this is a Rectangle");
       }   
    }
    
    public class Square implement Shape{
       @overide
       public void draw(){
         System.out.println("this is a Square");
       }   
    }
    
  3. 創(chuàng)建工廠類:
    public class ShapFactory{
    //使用 getShape 方法獲取形狀類型的對(duì)象
    public Shape getShape(String shapeType){
    if(shapeType == null){
    return null;
    }
    if(shapeType.equalsIgnoreCase("CIRCLE")){
    return new Circle();
    }
    else if(shapeType.equalsIgnoreCase("RECTANGLE")){
    return new Rectangle();
    }
    else if(shapeType.equalsIgnoreCase("SQUARE")){
    return new Square();
    }
    return null;
    }
    }

  4. 調(diào)用工廠類創(chuàng)建實(shí)體的對(duì)象:

    public class FactoryPatternDemo {
    
         public static void main(String[] args) {
             ShapeFactory shapeFactory = new ShapeFactory();
    
             //獲取 Circle 的對(duì)象愚屁,并調(diào)用它的 draw 方法
             Shape shape1 = shapeFactory.getShape("CIRCLE");
    
             //調(diào)用 Circle 的 draw 方法
            shape1.draw();
    
           //獲取 Rectangle 的對(duì)象济竹,并調(diào)用它的 draw 方法
           Shape shape2 = shapeFactory.getShape("RECTANGLE");
    
          //調(diào)用 Rectangle 的 draw 方法
          shape2.draw();
    
          //獲取 Square 的對(duì)象,并調(diào)用它的 draw 方法
          Shape shape3 = shapeFactory.getShape("SQUARE");
    
          //調(diào)用 Square 的 draw 方法
         shape3.draw();
      }
    }
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末霎槐,一起剝皮案震驚了整個(gè)濱河市送浊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌丘跌,老刑警劉巖袭景,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異闭树,居然都是意外死亡耸棒,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門报辱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)与殃,“玉大人,你說(shuō)我怎么就攤上這事捏肢∧巫眩” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵鸵赫,是天一觀的道長(zhǎng)衣屏。 經(jīng)常有香客問(wèn)我,道長(zhǎng)辩棒,這世上最難降的妖魔是什么狼忱? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮一睁,結(jié)果婚禮上钻弄,老公的妹妹穿的比我還像新娘。我一直安慰自己者吁,他們只是感情好窘俺,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著复凳,像睡著了一般蓝牲。 火紅的嫁衣襯著肌膚如雪蜓陌。 梳的紋絲不亂的頭發(fā)上炫彩,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天改执,我揣著相機(jī)與錄音,去河邊找鬼髓棋。 笑死实檀,一個(gè)胖子當(dāng)著我的面吹牛惶洲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播膳犹,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼恬吕,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了须床?” 一聲冷哼從身側(cè)響起币呵,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎侨颈,沒(méi)想到半個(gè)月后余赢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡哈垢,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年妻柒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耘分。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡举塔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出求泰,到底是詐尸還是另有隱情央渣,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布渴频,位于F島的核電站芽丹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏卜朗。R本人自食惡果不足惜拔第,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望场钉。 院中可真熱鬧蚊俺,春花似錦、人聲如沸逛万。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)宇植。三九已至得封,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間当纱,已是汗流浹背呛每。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工踩窖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留坡氯,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像箫柳,于是被迫代替她去往敵國(guó)和親手形。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

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