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

資訊專欄INFORMATION COLUMN

設計模式之抽象工廠

VincentFF / 2550人閱讀

摘要:類圖上面的這張圖引用設計模式之禪關于抽象工廠的通用類圖,說實話,我覺得這張圖很難懂,不容易表述抽象工廠模式也或許是個人理解能力。

前言

關于抽象工廠模式,博主初學的時候是懵逼的,花了好大力氣才明白它與工廠模式的異同,不得不說理解能力還有待加強(~。~)

什么是抽象工廠模式
為創建一組相關或相互依賴的對象提供一個接口,而且無須指定它們的具體類。

讓我們再回顧下工廠模式的定義:

定義一個用于創建對象的接口,讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到子類。

從定義上看,區別在于抽象工廠是針對一組相關或依賴的對象(產品和產品之間有共同的約束),而工廠模式是針對一種產品。

UML類圖

上面的這張圖引用設計模式之禪關于抽象工廠的通用類圖,說實話,我覺得這張圖很難懂,不容易表述抽象工廠模式(也或許是個人理解能力)。下面上我的例子:

抽象工廠模式是工廠方法模式的升級版本,在有多個業務品種、業務分類時,通過抽象工廠模式產生需要的對象是一種非常好的解決方式。要想理解抽象工廠模式,有兩個概念我們是必須要理解的。

產品族:功能相關聯的一組產品,一般位于不同產品等級結構的相同位置上,每一個產品族中的產品數應該與產品等級結構數一致。在上面的例子中:ComputerCpu和ComputerRam屬于一個產品族,MobileRam和MobileCpu屬于一個產品族.

產品等級結構: 一種產品內部的不同等級。比如cpu下的computerCpu和MobileCpu,Ram下的computerRam和mobileRam.

看懂了嗎?沒看懂就再看一遍啊.....如果不理解這兩個概念,就不會理解抽象工廠,所以務必看懂再看接下來的文章.(想要更仔細的了解這兩個概念,可以觀看鏈接描述)

使用場景

一組對象有相同的約束,就可以使用抽象工廠模式。就比如我們常用的qq音樂,有mac版的,有windows版的,他們共同的約束就是操作系統。相應的在這個也無力,產品族有兩個,mac版qq音樂和windows版qq音樂。產品等級結構只有一個就是qq音樂了。

代碼分析

按照上面的cpu和ram

public abstract class Cpu {

    public void introduce() {
        System.out.println("我是" + getOperationSystem() + "處理器,運算速度賊快");
    }

    abstract String getOperationSystem();
}
public class ComputerCpu extends Cpu {
    @Override
    String getOperationSystem() {
        return "pc";
    }
}
public class MobileCpu extends Cpu {
    @Override
    String getOperationSystem() {
        return "移動端";
    }
}
public abstract class Ram {
    public void introduce(){
        System.out.println("我是"+getOperationSystem()+"內存,存取速度賊快");
    }

    abstract String getOperationSystem();
}
public class ComputerRam extends Ram {
    @Override
    String getOperationSystem() {
        return "pc";
    }
}
public class MobileRam extends Ram {
    @Override
    String getOperationSystem() {
        return "移動端";
    }
}
public abstract class AbstractFactory {

    abstract Cpu createCpu();
    abstract Ram createRam();
}
public class ComputerFactory extends AbstractFactory {
    @Override
    Cpu createCpu() {
        return new ComputerCpu();
    }

    @Override
    Ram createRam() {
        return new ComputerRam();
    }
}
public class MobileFactory extends AbstractFactory {
    @Override
    Cpu createCpu() {
        return new MobileCpu();
    }

    @Override
    Ram createRam() {
        return new MobileRam();
    }
}
public class Client {

    public static void main(String[] args) {
        AbstractFactory computerFactory = new ComputerFactory();
        AbstractFactory mobileFactory = new MobileFactory();

        computerFactory.createCpu().introduce();
        computerFactory.createRam().introduce();

        mobileFactory.createCpu().introduce();
        mobileFactory.createRam().introduce();
    }
}
測試結果:
我是pc處理器,運算速度賊快
我是pc內存,存取速度賊快
我是移動端處理器,運算速度賊快
我是移動端內存,存取速度賊快

相信只要前面的理論懂了,上面的這個小例子簡直不要太輕松。

抽象廠模式具有封裝性,高層模塊在調用時根本不需要關心具體實現類,只要知道接口(抽象類)就可以了,我們不需要關心對象的創建問題,將創建對象的問題統統拋給工廠,只需知道一個工廠,就可以創造這個產品組的所有產品,優秀的設計就該如此。

產品族內的約束非公開狀態,比如我使用手機,用的cpu和ram肯定都是移動端的,你總不可能手機用pc的cpu或者ram吧,本來就是不配套的配置。但是我們不需要去關心這個,因為他們的約束都在工廠內實現

總結

抽象工廠模式主要是解決一組具有相同約束的對象的創建問題。其中最核心的概念就是產品族和產品等級結構,抽象工廠模式在擴展產品等級結構是非常容易的,只需要增加新的產品類和新的工廠類就可以,從這點看它是符合開閉原則的,若是想擴展產品族,也就是增加一種產品,就需要創建對應類,同時需要修改所有的工廠,是不符合開閉原則的。

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

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

相關文章

  • 一天一個設計模式JS實現——工廠模式

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

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

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

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

    摘要:所謂的產品族,一般或多或少的都存在一定的關聯,抽象工廠模式就可以在類內部對產品族的關聯關系進行定義和描述,而不必專門引入一個新的類來進行管理。 0x01.定義與類型 定義:抽象工廠模式提供一個創建一系列相關或相互依賴對象的接口 無需指定它們具體的類 類型:創建型 UML showImg(https://segmentfault.com/img/bVbtBp1?w=800&h=862...

    Acceml 評論0 收藏0
  • 工廠模式(一)抽象工廠模式

    摘要:主要詳解簡單工廠模式到抽象工廠模式的演變。抽象工廠模式當一個類別的產品還有多個系列區分時,為了按系列生產商品,使用抽象工廠區分。 主要詳解簡單工廠模式到抽象工廠模式的演變。 簡單工廠模式 即靜態工廠模式1.將對象的創建和使用分開;2.將生產過程集中,便于集中管理;3.當需要創建的對象類有變動時,就不用在所有new 的地方修改了,直接修改工廠類即可; /** * 簡單工廠模式 ---...

    woshicixide 評論0 收藏0

發表評論

0條評論

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