歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 設計模式——抽象工廠模式及Java實現

設計模式——抽象工廠模式及Java實現

日期:2017/3/1 9:14:35   编辑:Linux編程

設計模式在大型軟件工程中很重要,軟件工程中采用了優秀的設計模式有利於代碼維護,方便日後更改和添加功能。
設計模式有很多,而且也隨著時間在不斷增多,其中最著名的是四人組寫的23種設計模式,並分為三大類:創建型模式,結構型模式,行為型模式。
抽象工廠模式屬於創建型模式裡面的五種之一,其中的工廠模式由於違背開閉原則(也就是對擴展開發,對修改關閉),所以抽象工廠模式可以有效解決

這裡先給出java的抽象工廠模式的示例代碼:

//抽象的人類,為所有的人造人提供一個相同的人造人屬性
public abstract class Man {
    public abstract void eat();
}

public class AsiaMan extends Man {  
    @Override
    public void eat() {
    System.out.println("亞洲人用筷子吃");
    }
}

public  class AmericanSuperMan extends Man  {
    @Override
    public void eat() {
    System.out.println("美國人用刀叉吃");
    }
}
//抽象工廠,為所有的不同的工廠提供一個制作人造人的相同方法
public abstract class Factory {
    public abstract Man product();
}

public class AsiaManFactory extends Factory {
    @Override
    public Man product() {
        Man anAisaMan = new AsiaMan();
        return anAisaMan;
    }
}

public class AmericanFactory extends Factory {
    @Override
    public Man product() {
        AmericanSuperMan anAmericanSuperMan = new AmericanSuperMan();
        return anAmericanSuperMan;
    }
}   
public static void main(String[] args) {
    
    AsiaManFactory asiaManFactory = new AsiaManFactory();
    AmericanFactory americanFactory = new AmericanFactory();
    
    Man anAmericanSuperMan = americanFactory.product();
    Man anAsia = asiaManFactory.product();
    
    anAsia.eat();
    anAmericanSuperMan.eat();   

}

運行結果:
亞洲人用筷子吃
美國人用刀叉吃

假設2048年,人類科技創造了人造人,所有的人造人可以在工廠裡面生產,
一個人造人父類為所有不同的人造人提供一個相同的屬性:吃,亞洲人造人用筷子吃,美洲人造人用刀叉吃。抽象工廠可以為不同的工廠提供一個統一的生成流程,亞洲人造人工廠生產亞洲人造人,美洲人造人工廠生產美洲人造人

這裡就有一個問題,為什麼要用工廠模式,為什麼不直接用 ClassA a = new ClassA();呢?看起來是等價的,但是如果生產的人造人不是在工廠裡生產的,而是分布在世界各地的小作坊生產的,那麼當所有亞洲人造人生產方式變了,那麼就要更改世界各地的小作坊的生產方法,這樣改下來就太麻煩了,用了工廠模式,只需要修改工廠裡面的生產方法,那麼得到的人造人就是統一的了。

其實工廠模式就是對示例化過程的一個封裝,為日後維護代碼提供一個便捷的方法

Copyright © Linux教程網 All Rights Reserved