国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

設計模式 - 抽象工廠模式

這篇具有很好參考價值的文章主要介紹了設計模式 - 抽象工廠模式。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

學完工廠模式,才發(fā)現(xiàn)還有一個抽象工廠模式;學習后發(fā)現(xiàn)不論是通過接口方式、還是繼承方式,都可以使用抽象工廠模式;但是個人建議更多的時候,我們可以優(yōu)先考慮接口方式,畢竟 單繼承,多實現(xiàn)

設計模式分為三種類型,共23種

  • 創(chuàng)建型模式:單例模式、工廠模式、抽象工廠模式、建造者模式、原型模式
  • 結構型模式:代理模式、裝飾模式、外觀模式、享元模式、橋接模式、組合模式、適配器模式
  • 行為型模式:觀察者模式、策略模式、中介者模式、模版方法模式、命令模式、迭代器模式、職責鏈模式(責任鏈模式)、備忘錄模式、解釋器模式(Interpreter模式)、狀態(tài)模式、訪問者模式

每個人的理解方式、理解程度都不相同,怎么去理解有時候并不太關鍵,主要最終結果一致即可,以下僅代表個人學習觀點,如有錯誤,歡迎指出,共同進步

基礎認知

簡單工廠模式針對的是單一對象+綜合行為管理的(同等級產(chǎn)品),抽象工廠模式針對的是同類行為管理(同族產(chǎn)品)

取個簡單的例子來說明一下工廠模式和抽象工廠模式,思維上可以稍微跳躍一下去想象

抽象工廠模式,即工廠方法模式的升級版,其可以生產(chǎn)一個產(chǎn)品族的產(chǎn)品。

簡單工廠模式更多的針對是單類產(chǎn)品:以生活中隨處可見的車為例,通常車的組成發(fā)動機、輪胎、方向盤等等,如果我們寫一個工廠模式,那么首先我們需要做以下幾步

  1. 寫一個抽象產(chǎn)品類(主要用于說明車的組成,內(nèi)部包含發(fā)動機、輪胎、方向盤等等)
  2. 寫一個或多個具體產(chǎn)品類繼承、實現(xiàn)抽象類的方法(他們內(nèi)部的實現(xiàn)有所不同,例如發(fā)動機可能有v4,v6的)
  3. 寫一個工廠管理類去動態(tài)創(chuàng)建所需要的具體類

在上面條件下,其實生活中的車大多有各自品牌,例如奧迪、寶馬廠商等等,而這些廠商也未必只生產(chǎn)車,可能他們都對彩妝行業(yè)有涉獵,那么就有了奧迪口紅?寶馬口紅?寶馬搖搖椅等等… 而像這種不同品牌的同樣單一類型產(chǎn)品可以定義為同級產(chǎn)品·,而他們各自的廠商品牌可定義為同族產(chǎn)品

那么在這種場景下又改如何去寫工廠模式?難道像之前一樣,寫一個抽象產(chǎn)品類,然后寫具體產(chǎn)品類(汽車的組成類),然后用工廠嗎?

可能我上面描述的并不是很清晰,可以直接對照這里

形象比喻
工廠方法模式的局限性是只能生產(chǎn)一類產(chǎn)品,這里我們把同類產(chǎn)品呢叫做同等級產(chǎn)品,如手機是一個等級,電腦是一個等級。
而有一個新的定義,就是同族產(chǎn)品,如華為手機、華為電腦是同一族,同屬華為族;蘋果手機、蘋果電腦是同一族,同屬蘋果族。于是,產(chǎn)品工廠的定義也由同等級工廠升級為同族產(chǎn)品工廠,如華為工廠、蘋果工廠。不言而喻,不管是華為工廠還是蘋果工廠,都具有生產(chǎn)手機和電腦的功能,故,抽象工廠的的作用就被定義了,那就是定義生產(chǎn)手機和電腦。

你可能會發(fā)現(xiàn)中間好像少了一層管理類(奧迪、寶馬分化),這時候就用到了抽象工廠模式, 這種模式可以說是換了一個維度是分類組裝,需要用到一個抽象工廠類~

  1. 抽象產(chǎn)品類
  2. 具體產(chǎn)品類
  3. 抽象工廠類
  4. 具體工廠類

抽象工廠模式 相比于 簡單工廠模式,個人認為主要區(qū)別有以下幾點

  • 簡單工廠模式,一般只有一個工廠類用于管理各抽象類下具體類的創(chuàng)建
  • 抽象工廠模式,多了一層抽象層用于管理各具體工廠類,同時多個具體工廠并行
  • 針對每個具體產(chǎn)品行為做了統(tǒng)一管理

采用接口、基礎方式實現(xiàn)工廠模式、工廠抽象模式(“單繼承,多實現(xiàn)”)的區(qū)別

繼承方式

  • 缺點:相對而言擴展性有限,大部分只對當前的某一類型進行擴展使用
  • 優(yōu)點:耦合性降低

接口方式

  • 缺點:加入工廠管理者類太多,對于后期不太方便維護
  • 優(yōu)點:擴展性強,較靈活

Demo結構、效果

錯誤理解

分類結構

設計模式 - 抽象工廠模式,設計模式,設計模式,抽象工廠模式

效果

設計模式 - 抽象工廠模式,設計模式,設計模式,抽象工廠模式


基礎實現(xiàn)

后來再看,發(fā)現(xiàn)當時理解的有一定問題,等之后有時間再來寫一個示例

如果將抽象工廠模式細化的話,可以用類似這種方式去學習;如果不理解,我建議直接看項目實現(xiàn)

抽象產(chǎn)品類

ProductName

package com.example.kotlindemo.factory;

public interface ProductName {
    public void carName();
}

ProductYield

package com.example.kotlindemo.factory;

public interface ProductYield {
    public void carYield();
}

具體產(chǎn)品類

AdNameModel

package com.example.kotlindemo.factory;

import android.util.Log;

public class AdNameModel implements ProductName {

    @Override
    public void carName() {
        Log.e("tag", "奧迪 A4");
    }
}

AdYieldModel

package com.example.kotlindemo.factory;

import android.util.Log;

public class AdYieldModel implements ProductYield {

    @Override
    public void carYield() {
        Log.e("tag","奧迪 A4 出產(chǎn)于:2008");
    }
}

BmNameModel

package com.example.kotlindemo.factory;

import android.util.Log;

public class BmNameModel implements ProductName {

    @Override
    public void carName() {
        Log.e("tag", "寶馬 X1");
    }
}

BmYieldModel

package com.example.kotlindemo.factory;

import android.util.Log;

public class BmYieldModel implements ProductYield {

    @Override
    public void carYield() {
        Log.e("tag", "寶馬 X1 出產(chǎn)于:2006");
    }
}

抽象工廠類

行為管理者:共性行為,擁有相同的組成部分

CarFactory

package com.example.kotlindemo.factory;

public interface CarFactory {
    public ProductName name();

    public ProductYield yield();
}

具體工廠類

以單產(chǎn)品為維度,內(nèi)部涵蓋抽象多個具體類

具體工廠類 AdFactory

package com.example.kotlindemo.factory;

public class AdFactory implements CarFactory {

    @Override
    public ProductName name() {
        return new AdNameModel();
    }

    @Override
    public ProductYield yield() {
        return new AdYieldModel();
    }
}

具體工廠類 BmFactory

package com.example.kotlindemo.factory;

public class BmFactory implements CarFactory {

    @Override
    public ProductName name() {
        return new BmNameModel();
    }

    @Override
    public ProductYield yield() {
        return new BmYieldModel();
    }
    
}

使用方式

  AdFactory adFactory = new AdFactory();
  adFactory.name().carName();
  adFactory.yield().carYield();

  BmFactory bmFactory = new BmFactory();
  bmFactory.name().carName();
  bmFactory.yield().carYield();

項目實現(xiàn)

基礎實現(xiàn)有時候反倒把人繞暈… 不如直接以這樣的方式說明

抽象產(chǎn)品

ProductN

package com.example.kotlindemo.factoryN;

public interface ProductN {
    public void carName();

    public void carYield();
}

具體產(chǎn)品

每一個產(chǎn)品都相對獨立,具有共性行為

AdModelN

package com.example.kotlindemo.factoryN;

import android.util.Log;

public class AdModelN implements ProductN {

    @Override
    public void carName() {
        Log.e("tag", "奧迪 A4");
    }

    @Override
    public void carYield() {
        Log.e("tag","奧迪 A4 出產(chǎn)于:2008");
    }

}

BmModelN

package com.example.kotlindemo.factoryN;

import android.util.Log;

public class BmModelN implements ProductN {

    @Override
    public void carName() {
        Log.e("tag", "寶馬 X1");
    }

    @Override
    public void carYield() {
        Log.e("tag", "寶馬 X1 出產(chǎn)于:2006");
    }

}

抽象工廠

package com.example.kotlindemo.factoryN;

public interface CarFactoryN {
    public ProductN model();
}

具體工廠

每一個具體的工廠都可以返回該對象的不同模型,例如同為奧迪車型可以返回 奧迪A4、奧迪A6、奧迪Q5等等

AdFactoryN

package com.example.kotlindemo.factoryN;

public class AdFactoryN implements CarFactoryN {

    @Override
    public ProductN model() {
        return new AdModelN();
    }
}

BmFactoryN文章來源地址http://www.zghlxwxcb.cn/news/detail-549705.html

package com.example.kotlindemo.factoryN;

public class BmFactoryN implements CarFactoryN {

    @Override
    public ProductN model() {
        return new BmModelN();
    }
}

使用方式

  AdFactoryN adFactoryN = new AdFactoryN();
  adFactoryN.model().carName();
  adFactoryN.model().carYield();

  BmFactoryN bmFactoryN = new BmFactoryN();
  bmFactoryN.model().carName();
  bmFactoryN.model().carYield();

到了這里,關于設計模式 - 抽象工廠模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 設計模式(三):抽象工廠模式

    設計模式(三):抽象工廠模式

    抽象工廠模式 (Abstract Factory Pattern)屬于創(chuàng)建型模式,是圍繞一個超級工廠創(chuàng)建其他工廠。該超級工廠又稱為其他工廠的工廠。 在 抽象工廠模式 中,接口是負責創(chuàng)建一個相關對象的工廠,不需要顯式指定它們的類。每個生成的工廠都能按照工廠模式提供對象。 通過使用 抽

    2024年04月25日
    瀏覽(22)
  • 設計模式(3)抽象工廠模式

    設計模式(3)抽象工廠模式

    一、介紹: 1、定義:提供一個創(chuàng)建一系列相關或相互依賴對象的接口,而無須指定它們具體的類。 2、組成結構: (1)抽象工廠角色:擔任這個角色的是工廠方法模式的核心,它是與應用程序無關的。任何在模式中創(chuàng)建對象的工廠類必須實現(xiàn)這個接口。 (2)具體工廠角色

    2024年02月11日
    瀏覽(23)
  • 重溫設計模式 --- 抽象工廠模式

    抽象工廠模式 一種創(chuàng)建型設計模式,它提供了一種方式來封裝一組具有相同主題的工廠,而不必指定它們具體的類。這樣,客戶端代碼就可以使用抽象工廠來創(chuàng)建一組相關的對象,而不必關心實際創(chuàng)建的具體類。 抽象工廠模式有以下幾個主要角色: 抽象工廠(AbstractFactory)

    2024年02月13日
    瀏覽(36)
  • 【設計模式專題之抽象工廠模式】3. 家具工廠

    題目描述 小明家新開了兩個工廠用來生產(chǎn)家具,一個生產(chǎn)現(xiàn)代風格的沙發(fā)和椅子,一個生產(chǎn)古典風格的沙發(fā)和椅子,現(xiàn)在工廠收到了一筆訂單,請你幫他設計一個系統(tǒng),描述訂單需要生產(chǎn)家具的信息。 輸入描述 輸入的第一行是一個整數(shù) N(1 ≤ N ≤ 100),表示訂單的數(shù)量。

    2024年03月12日
    瀏覽(31)
  • 結構型設計模式-單例模式/工廠模式/抽象工廠

    創(chuàng)建型設計模式-單例模式/工廠模式/抽象工廠 行為型設計模式:模板設計模式/觀察者設計模式/策略設計模式 C#反射機制實現(xiàn)開閉原則的簡單工廠模式 設計模式可以分為三種類型: 創(chuàng)建型設計模式、結構型設計模式和行為型設計模式 。 創(chuàng)建型設計模式:這些模式涉及到 對

    2024年02月11日
    瀏覽(24)
  • [設計模式]創(chuàng)建型模式-抽象工廠模式

    抽象工廠模式是一種創(chuàng)建型設計模式,它提供了一種創(chuàng)建一系列相關或相互依賴對象的接口,而無需指定它們具體的類。抽象工廠模式將一組具有共同主題的單個工廠封裝起來,它提供接口用于創(chuàng)建相關或依賴對象的家族,而不需要指定具體的類。 抽象工廠模式包含以下幾個

    2024年03月08日
    瀏覽(18)
  • 設計模式-創(chuàng)建型模式-抽象工廠模式

    設計模式-創(chuàng)建型模式-抽象工廠模式

    抽象工廠模式(Abstract Factory Pattern):提供一個創(chuàng)建一系列相關或相互依賴對象的接口,而無須指定它們具體的類。抽象工廠模式又稱為Kit模式,它是一種對象創(chuàng)建型模式。 由于工廠方法模式中的每個工廠只生產(chǎn)一類產(chǎn)品,可能會導致系統(tǒng)中存在大量的工廠類,勢必會增加系

    2024年02月22日
    瀏覽(28)
  • [設計模式] 抽象工廠模式簡易案例

    定義:提供一個接口來創(chuàng)建一系列相關或依賴對象,而無需指定其具體類。 痛點:當需要創(chuàng)建一組相關對象,例如操作系統(tǒng)的不同界面組件(按鈕、文本框等)時,抽象工廠模式非常有用。 以下是一個簡單的抽象工廠模式的 Java 示例,假設你要創(chuàng)建不同類型的按鈕和窗口組

    2024年02月09日
    瀏覽(18)
  • Java設計模式-抽象工廠模式

    設計模式是軟件設計中的一種常見方法,通過定義一系列通用的解決方案,來解決常見的軟件設計問題。其中,抽象工廠模式是一種非常常見的設計模式,它可以幫助我們創(chuàng)建一組相關的對象,而不需要指定具體的實現(xiàn)方式。 抽象工廠模式是一種創(chuàng)建型設計模式,它提供了一

    2024年02月01日
    瀏覽(24)
  • 【設計模式】創(chuàng)建型-抽象工廠模式

    【設計模式】創(chuàng)建型-抽象工廠模式

    在工廠方法模式中,每一個具體的工廠子類只能生成一種具體的產(chǎn)品,如果想要生產(chǎn)另外一種產(chǎn)品,就需要重新定義一個抽象工廠類,這樣的拓展性還是會有點不足,而抽象工廠模式則是可以一個具體工廠可以生產(chǎn)不同的產(chǎn)品。 在學習抽象工廠模式之前先了解一下 產(chǎn)品族和

    2023年04月09日
    瀏覽(47)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包