最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入理解Java設(shè)計(jì)模式之抽象工廠模式

 更新時(shí)間:2021年11月07日 15:26:21   作者:一指流砂~  
這篇文章主要介紹了JAVA設(shè)計(jì)模式之抽象工廠模式的的相關(guān)資料,文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解下

一、什么是抽象工廠模式

為創(chuàng)建一組相關(guān)或相互依賴的對(duì)象提供一個(gè)接口,而且無(wú)需指定他們的具體類。

抽象工廠模式是所有形態(tài)的工廠模式中最為抽象和最具一般性的一種形態(tài)。抽象工廠模式是指當(dāng)有多個(gè)抽象角色時(shí),使用的一種工廠模式。

抽象工廠模式可以向客戶端提供一個(gè)接口,使客戶端在不必指定產(chǎn)品的具體的情況下,創(chuàng)建多個(gè)產(chǎn)品族中的產(chǎn)品對(duì)象。

根據(jù)里氏替換原則,任何接受父類型的地方,都應(yīng)當(dāng)能夠接受子類型。因此,實(shí)際上系統(tǒng)所需要的,僅僅是類型與這些抽象產(chǎn)品角色相同的一些實(shí)例,而不是這些抽象產(chǎn)品的實(shí)例。

換言之,也就是這些抽象產(chǎn)品的具體子類的實(shí)例。工廠類負(fù)責(zé)創(chuàng)建抽象產(chǎn)品的具體子類的實(shí)例。

二、抽象工廠模式的應(yīng)用場(chǎng)景

當(dāng)一個(gè)對(duì)象都有相同的約束時(shí),可以使用抽象工廠模式。
打個(gè)比方說(shuō),這個(gè)工廠的幾個(gè)產(chǎn)品都需要經(jīng)過(guò)某些共同的步驟和打上相同的商標(biāo),這一組產(chǎn)品可以在一個(gè)工廠里面生產(chǎn),減少很多重復(fù)的代碼在不同的地方都出現(xiàn)多次。

三、抽象工廠模式和工廠方法模式對(duì)比

抽象工廠模式的定義:為創(chuàng)建一組相關(guān)或相互依賴的對(duì)象提供一個(gè)接口,而且無(wú)需指定它們的具體類。

工廠方法模式的定義:為某個(gè)對(duì)象提供一個(gè)接口,而且無(wú)需指定它們的具體類。

都是子類實(shí)現(xiàn)接口的方法,并在子類寫(xiě)具體的代碼。

工廠方法模式中也是可以有多個(gè)具體工廠,也是可以有多個(gè)抽象產(chǎn)品,和多個(gè)具體工廠、具體產(chǎn)品類。

區(qū)別是在抽象工廠接口類中,能創(chuàng)建幾個(gè)產(chǎn)品對(duì)象。
抽象工廠模式的工廠能創(chuàng)建多個(gè)相關(guān)的產(chǎn)品對(duì)象,而工廠方法模式的工廠只創(chuàng)建一個(gè)產(chǎn)品對(duì)象。

四、抽象工廠模式的優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

1.它分離了具體的類

2.它使得易于交換產(chǎn)品系列

3.它有利于產(chǎn)品的一致性

缺點(diǎn):

難以支持新種類的產(chǎn)品。

抽象方法模式的最大缺點(diǎn)就是產(chǎn)品族本身的擴(kuò)展非常困難。如果在產(chǎn)品族中增加一個(gè)新的產(chǎn)品類型,則需要修改多個(gè)接口,并影響現(xiàn)已有的工廠類。

上面這句話,有些人不怎么理解,我給大家解釋一下,打個(gè)比方說(shuō),你要在這個(gè)工廠創(chuàng)建三個(gè)對(duì)象,原本只是創(chuàng)建兩個(gè)對(duì)象的,那么你就要在抽象方法中添加一個(gè)創(chuàng)建對(duì)象的方法,那么所有實(shí)現(xiàn)了這個(gè)接口的類都是要重新添加這個(gè)創(chuàng)建對(duì)象的方法,這就是對(duì)之前的工廠有影響的原因。

五、抽象工廠模式的實(shí)現(xiàn)

首先是抽象工廠,生產(chǎn)對(duì)象的抽象。

public abstract class AbstractFactory {
    abstract Size getSize();
}

下面是具體工廠

public class IphoneXFactory: AbstractFactory{
     Size getSize() {
        return new IphoneXSize();
    }
}
 public class IphoneXRFactory: AbstractFactory{
     Size getSize() {
        return new IphoneXRSize();
    }
}
 public class HuaWeiMate10Factory: AbstractFactory{
     Size getSize() {
        return new HuaWeiMate10Size();
    }
}
 public class XiaoMi8Factory: AbstractFactory{
     Size getSize() {
        return new XiaoMi8Size();
    }
}

下面是對(duì)象抽象出來(lái)的接口

public interface Size {
    public void getSize();
}

最后是我們要生產(chǎn)的對(duì)象

public class IphoneXSize: Size {
     public void getSize() {
        System.out.println("IphoneX尺寸.");
    }
}
public class IphoneXRSize: Size {
     public void getSize() {
        System.out.println("IphoneXR尺寸.");
    }
}
public class HuaWeiMate10Size: Size {
     public void getSize() {
        System.out.println("HuaWeiMate10尺寸.");
    }
}
public class XiaoMi8Size: Size {
     public void getSize() {
        System.out.println("小米8尺寸.");
    }
}

客戶端調(diào)用

public class Test {
    public  static void main(String args[]){
        AbstractFactory factory = new IphoneXFactory();
        factory.getSize(); 
    }
}

六、總結(jié)

工廠模式可以分為:簡(jiǎn)單工廠模式,工廠方法模式抽象工廠模式。

簡(jiǎn)單工廠模式就沒(méi)什么好說(shuō)的了,無(wú)非是所有的東西都寫(xiě)在一個(gè)類里面,要什么就調(diào)用什么,如果要添加新的方法也是到這類里面添加,代碼很多,看起來(lái)也是很亂,就像一個(gè)大工廠,什么都在里面。擴(kuò)展性很低。

而工廠方法模式,把說(shuō)明的理論和生產(chǎn)的東西就分開(kāi)一點(diǎn)。抽象工廠模式是工廠方法模式的升級(jí)。

工廠模式與抽象工廠模式都屬于創(chuàng)建型模式,在工廠模式中彌補(bǔ)了簡(jiǎn)單工廠模式的缺陷(不符合開(kāi)閉原則),而在抽象工廠模式中彌補(bǔ)了工廠模式的不足(一個(gè)工廠只能生產(chǎn)一種產(chǎn)品)。

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • JAVA日期處理類詳解

    JAVA日期處理類詳解

    這篇文章主要介紹了Java實(shí)現(xiàn)的日期處理類,結(jié)合完整實(shí)例形式分析了Java針對(duì)日期的獲取、運(yùn)算、轉(zhuǎn)換等相關(guān)操作技巧,需要的朋友可以參考下
    2021-08-08
  • Java實(shí)現(xiàn)讀取163郵箱,qq郵箱的郵件內(nèi)容

    Java實(shí)現(xiàn)讀取163郵箱,qq郵箱的郵件內(nèi)容

    這篇文章主要利用Java語(yǔ)言實(shí)現(xiàn)讀取163郵箱和qq郵箱的郵件內(nèi)容,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起動(dòng)手試一試
    2022-02-02
  • Java線程組與未處理異常實(shí)例分析

    Java線程組與未處理異常實(shí)例分析

    這篇文章主要介紹了Java線程組與未處理異常,結(jié)合實(shí)例形式分析了java線程組處理異常的相關(guān)技巧與操作注意事項(xiàng),需要的朋友可以參考下
    2019-09-09
  • httpclient evict操作源碼解讀

    httpclient evict操作源碼解讀

    這篇文章主要為大家介紹了httpclient evict操作源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • java基于控制臺(tái)的學(xué)生學(xué)籍管理系統(tǒng)

    java基于控制臺(tái)的學(xué)生學(xué)籍管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java基于控制臺(tái)的學(xué)生學(xué)籍管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • java+testng+selenium的自動(dòng)化測(cè)試實(shí)例

    java+testng+selenium的自動(dòng)化測(cè)試實(shí)例

    這篇文章主要介紹了java+testng+selenium的自動(dòng)化測(cè)試實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Spring Security Remember me使用及原理詳解

    Spring Security Remember me使用及原理詳解

    這篇文章主要介紹了Spring Security Remember me使用及原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • maven項(xiàng)目在svn中的上傳與檢出的方法

    maven項(xiàng)目在svn中的上傳與檢出的方法

    企業(yè)開(kāi)發(fā)中經(jīng)常使用svn來(lái)為我們控制代碼版本,也經(jīng)常使用maven來(lái)管理項(xiàng)目。下面將介紹一下如何將maven項(xiàng)目上傳到svn中,如何將項(xiàng)目從svn中檢出,感興趣的小伙伴們可以參考一下
    2019-02-02
  • 解決springboot 2.x 里面訪問(wèn)靜態(tài)資源的坑

    解決springboot 2.x 里面訪問(wèn)靜態(tài)資源的坑

    這篇文章主要介紹了解決springboot 2.x 里面訪問(wèn)靜態(tài)資源的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 詳解Java如何判斷一個(gè)對(duì)象是否為空

    詳解Java如何判斷一個(gè)對(duì)象是否為空

    我們?cè)趧傞_(kāi)始學(xué)習(xí)Java的時(shí)候,遇到過(guò)最多的異??隙ㄊ浅裘阎目罩羔槷惓#∟ullPointerException),可以說(shuō)它陪伴了我們整個(gè)初學(xué)階段,那么如何優(yōu)雅的判斷一個(gè)對(duì)象是否為空并且減少空指針異常呢,
    2024-01-01

最新評(píng)論

望谟县| 屏山县| 孟津县| 马山县| 耒阳市| 沅江市| 麦盖提县| 平昌县| 西乌珠穆沁旗| 明光市| 赤水市| 九龙城区| 新昌县| 平果县| 贺州市| 东平县| 武穴市| 郓城县| 石狮市| 桦南县| 鄂伦春自治旗| 新巴尔虎右旗| 霍城县| 吴川市| 南通市| 武夷山市| 兴安县| 焉耆| 濉溪县| 尼勒克县| 谢通门县| 漳州市| 营山县| 丹东市| 恭城| 织金县| 铁岭市| 资中县| 张家口市| 云和县| 雷山县|