Java設計模式之從[星際爭霸1]分析抽象原廠模式

來源:互聯網
上載者:User

  抽象原廠模式是建立型模式之一。建立型模式有原廠模式(抽象工廠、Factory 方法)、產生器模式、單體模式、原型模式四種。下面我來簡單分析一下抽象原廠模式。

  抽象原廠模式的定義是建立一個提供一系列相關或相互依賴對象的介面,而無需指定它們具體的類。所有的建立型模式有一個特點,我們不關心工廠生產出來的具體對象的類型,我們會將其具體的類與工廠分離開來。這麼說的話,很抽象難懂,下面是一個關於星際爭霸的例子。

  在遊戲星際爭霸中,人族的兵營可以生產兩種兵:機槍兵和火焰兵,機槍兵能夠用機槍攻擊,火焰兵能夠用火焰槍來攻擊。我們需要構建一個兵營,使得能夠生產這兩種兵,並且他們都有著自己的攻擊方法。

  Java代碼如下:

interface SoldierFactory{    Soldier ProduceMarine();    Soldier ProduceFirebat();}interface Soldier{    void attack();}class Marine implements Soldier{    public void attack(){        System.out.println("機槍兵用機槍掃射");    }}class Firebat implements Soldier{    public void attack(){        System.out.println("火焰兵使用噴火槍進行攻擊");    }}class Barracks implements SoldierFactory{    public Soldier ProduceMarine(){        System.out.println("產生了一個機槍兵");        return new Marine();    }        public Soldier ProduceFirebat(){        System.out.println("產生了一個火槍兵");        return new Firebat();    }}class Demo{    public static void main(String[] args) {        Barracks myBarrack = new Barracks();        Soldier marine = myBarrack.ProduceMarine();        Soldier firebat = myBarrack.ProduceFirebat();        marine.attack();        firebat.attack();    }}

  抽象工廠SolderFactory介面聲明了兩種方法,生產機槍兵和生產火焰兵。每個兵種都能夠攻擊,因此它們均繼承於Soldier介面。我們定義了Marine和Firebat類,將這兩種兵種的行為實現了。最後,為了實現生產兵種,我們定義了一個兵營類Barracks,並實現了SolderFactory中的方法,分別在ProduceMarine和ProduceFirebat中實現了生產機槍兵和火焰兵的方法,並作為方法的返回值返回。

  在main方法中,我們看到了,我們先執行個體化了一個兵營myBarracks,然後用ProduceMarine和ProduceFirebat實現了兵種的生產,最後我們可以調用兵種的attack方法來讓他們用自己的方式攻擊。

  這裡需要注意的是,我們在聲明marine和firebat對象時,我們始終用的是Soldier這個介面來定義的,而不是用它們具體的類(Marine、Firebat)來進行定義。為什麼要這麼做?主要的原因還是為了實現分離,降低代碼的耦合度;另外Marine和Firebat類,可能會存在別的方法,用Soldier來進行聲明的話,就只會把attack方法暴露給我們。

  抽象原廠模式的缺點也是顯而易見的。假設我們要為工廠增加幽靈特工(Ghost,也就是我們俗稱的原子彈兵)和醫學兵,我們不得不修改SoldierFactory,為它增加ProduceGhost和ProduceMedic方法聲明,這是不利於我們進行擴充的。也就是說,它難以支援新種類的產品。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.