国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

工廠模式(一)之抽象工廠模式

woshicixide / 2573人閱讀

摘要:主要詳解簡單工廠模式到抽象工廠模式的演變。抽象工廠模式當一個類別的產品還有多個系列區分時,為了按系列生產商品,使用抽象工廠區分。

主要詳解簡單工廠模式到抽象工廠模式的演變。

簡單工廠模式

即靜態工廠模式
1.將對象的創建和使用分開;
2.將生產過程集中,便于集中管理;
3.當需要創建的對象類有變動時,就不用在所有new 的地方修改了,直接修改工廠類即可;

/**
 * 簡單工廠模式 --- 靜態工廠模式
 */
public class StaticFactory {
    public static final int TYPE_APPLE = 1;//蘋果
    public static final int TYPE_ORANGE = 2;//桔子
    public static final int TYPE_BANANA = 3;//香蕉

    public static Fruit getFruit(int type){
        if(TYPE_APPLE == type){
            return new Apple();
        } else if(TYPE_ORANGE == type){
           return new Orange("Peter",80);
        } else if(TYPE_BANANA == type){
            return new Banana();
        }
        return null;
    }

    /**
     * 多方法工廠
     * @return
     */
    public static Fruit getFruitApple(){
        return new Apple();
    }

    public static Fruit getFruitOrange(){
        return new Orange("Peter",80);
    }

    public static Fruit getFruitBanana(){
        return new Banana();
    }


}

總的來說,簡單工廠模式就是用一個專業類(工廠類)來負責一種產品(水果類)的對象創建

簡單工廠模式不屬于23種設計模式,是工廠模式的基礎.

思考?若工廠生產的產品越來越多,靜態工廠不斷修改,方法擴展極為龐大,產品品種擴展不優雅.

1.不符合單一職責原則:一個類負責了各類水果的創建.

2.不符合開閉原則:擴展品種時,需要修改已有代碼,修改工廠類.

工廠方法模式

為了解決靜態工廠的問題,我們采用工廠方法模式

1.將靜態工廠打散,每一個水果品類,對應一個水果品類工廠來生產。

2.當需要擴展水果品類時,對應擴展一個水果品種的工廠即可。

將工廠類抽象出一個接口,對象的創建方法延遲到工廠子類去實現.

/**
 * 工廠方法接口
 */
public interface FruitFactory {
    public Fruit getFruit();//摘水果指令
}

/**
 * 橘子工廠子類
 */
public class OrangeFactory implements FruitFactory{
    public Fruit getFruit(){
        return new Orange("Peter",80);
    }
}


 /**
 * 香蕉工廠子類
 */
public class BananaFactory implements FruitFactory{
    public Fruit getFruit(){
        return new Banana();
    }
}
/**
 * 蘋果工廠子類
 */
public class AppleFactory implements FruitFactory{
    public Fruit getFruit(){
        return new Apple();
    }
}

 /**
 * 水果獲取測試
 *
 */
public class FruitTest {

    private static FruitFactory fruitFactory;

    public static void main(String[] args) {
        getFruit();
    }

    /**
     * 獲得水果
     */
    public static void getFruit(){
        //初始化蘋果工廠
        fruitFactory = new AppleFactory();
        Fruit fruit = fruitFactory.getFruit();
        fruit.draw();

        //初始化香蕉工廠
        fruitFactory = new BananaFactory ();
        Fruit bananafruit = fruitFactory.getFruit();
        bananafruit.draw();
        //想要獲取什么水果就實例化哪個工廠

    }
}


通過工廠方法模式,解決了單一職責和開閉原則問題。
需要具體的產品則初始化對應的工廠,在spring中經常是配置在配置文件中,

//然后注入進去,面向接口編程我們注入的是接口實現類在配置里
@Autowired
private FruitFactory fruitFactory;


為什么使用抽象工廠模式

業務慢慢發展,現在水果店品種增加,那我們按著工廠方法模式新增其他工廠實現類。

現在除了賣水果的服務還要提供額外服務,比如要包裝好,同樣的我們就新建一個包裝工廠接口如下BagFactory負責打包。

/**
 * 工廠方法模式
 */
public interface BagFactory {
    public Bag getBag();//打包指令
}
/**
 * 負責香蕉的打包
 */
public class BananaBagFactory implements BagFactory{
    public Bag getBag(){
        return new BananaBag();
    }
}
/**
 * 負責蘋果的打包
 */
public class AppleBagFactory implements BagFactory{
    public Bag getBag(){
        return new AppleBag();
    }
}


一個水果店的動作,就有從工廠獲取水果,然后從工廠獲取打包服務,如下:

/**
 * 水果店測試
 * Created by Peter on 10/8 008.
 */
public class FruitStoreTest {

    private static FruitFactory fruitFactory;
    private static BagFactory bagFactory;

    public static void main(String[] args) {
        pack();
    }

    /**
     * 郵寄打包
     */
    public static void pack(){
        //初始化蘋果工廠
        fruitFactory = new AppleFactory();//獵取工廠不對應
        Fruit fruit = fruitFactory.getFruit();
        fruit.draw();

        //初始化蘋果包裝工廠
        bagFactory = new BananaBagFactory();
        Bag bag = bagFactory.getBag();

        bag.pack();

        //....郵寄業務
    }   

產品類圖如下:

同樣的,要是再加一個郵寄業務,我們也是同樣的新增一個郵寄工廠。

問題? 在實際寫代碼的時候是否會發生這種問題: 即獵取工廠不對應

1.初始化蘋果工廠獲取蘋果

2.初始化香蕉工廠來做包裝業務

3.初始化別的郵寄工廠來做郵寄服務

抽象工廠模式

針對上面的問題就要用到我們的抽象工廠模式了。

抽象工廠模式:當一個類別的產品還有多個系列區分時,為了按系列生產商品,使用抽象工廠區分。
比如不同水果有不同包裝規格,客戶下單時,自動配出包裝,

--生產蘋果,配置紙箱包裝

--生產香蕉時,配置竹蘿包裝

PS:保證客戶端只使用同一個產品族中的對象(如下代碼的AppleFactory,BananaFactory)。

/**
 * 抽象水果工廠
 */
public abstract class AbstractFactory {

    public abstract  Fruit getFruit();

    public abstract Bag getBag();

}


/**
 * 水果工廠
 */
public class AppleFactory extends AbstractFactory{

    @Override
    public Fruit getFruit() {
        return new Apple();
    }

    @Override
    public Bag getBag() {
        return new AppleBag();
    }
}

/**
 * 水果工廠
 */
public class BananaFactory extends AbstractFactory{

    @Override
    public Fruit getFruit() {
        return new Banana();
    }

    @Override
    public Bag getBag() {
        return new BananaBag();
    }
}

/**
 * 抽象工廠模式測試
 * 按訂單發送貨品給客戶
 * Created by Peter on 10/8 008.
 */
public class OrderSendClient {
    public static void main(String[] args){
        sendFruit();
    }

    public static void sendFruit(){
        //初始化工廠
        AbstractFactory factory = new AppleFactory();//spring使用注入方式

        //得到水果
        Fruit fruit = factory.getFruit();
        fruit.draw();
        //得到包裝
        Bag bag = factory.getBag();
        bag.pack();
        //以下物流運輸業務。。。。

    }

}

抽象工廠模式類圖

代碼地址:https://github.com/lovemumu/F...

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/77719.html

相關文章

  • Spring框架我見()——工廠模式

    摘要:相對于工廠模式,抽象工廠模式生產的對象更加具體,也更加豐富,但相對編碼也更加復雜。具體的抽象工廠模式的實現大家可以參考菜鳥教程。知道了工廠模式和抽象工廠模式的區別,請大家使用的時候應該根據具體的情況進行選擇。 大家好,今天給大家分享一些Spring的學習心得,在講Spring之前,先和大家分享Spring中核心的設計模式。 工廠模式 在聊概念之前我先問問大家:什么是工廠? 這個很簡單,...

    venmos 評論0 收藏0
  • 優才公開課筆記:php設計模式 (二)工廠模式

    摘要:但本質是,簡單工廠并未嚴格遵循設計模式的開閉原則,當需要增加新產品時也需要修改工廠代碼。但是工廠方法則嚴格遵守開閉原則,模式只負責抽象工廠接口,具體工廠交給客戶去擴展。 最近開展了三次設計模式的公開課,現在來總結一下設計模式在PHP中的應用,這是第二篇創建型模式之工廠模式。 設計模式的一般介紹在第一篇文章講了,這里就不重復。 工廠模式 實現:定義一個用于創建對象的接口,讓子類決定實...

    aisuhua 評論0 收藏0
  • 設計模式抽象工廠

    摘要:類圖上面的這張圖引用設計模式之禪關于抽象工廠的通用類圖,說實話,我覺得這張圖很難懂,不容易表述抽象工廠模式也或許是個人理解能力。 前言 關于抽象工廠模式,博主初學的時候是懵逼的,花了好大力氣才明白它與工廠模式的異同,不得不說理解能力還有待加強(~。~) 什么是抽象工廠模式 為創建一組相關或相互依賴的對象提供一個接口,而且無須指定它們的具體類。 讓我們再回顧下工廠模式的定義: 定義一個用...

    VincentFF 評論0 收藏0
  • 個設計模式JS實現——工廠模式

    摘要:參考文章深入理解三種工廠模式工廠模式,工廠方法模式,抽象工廠模式詳解工廠模式是中最常用的設計模式之一。這種類型的設計模式屬于創建型模式,它提供了一種創建對象的最佳方式。 參考文章:深入理解java三種工廠模式工廠模式,工廠方法模式,抽象工廠模式 詳解 工廠模式(Factory Pattern)是 Java 中最常用的設計模式之一。這種類型的設計模式屬于創建型模式,它提供了一種創建對象的...

    Muninn 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<