欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一、什么是抽象工廠模式

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

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

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

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

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

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

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

三、抽象工廠模式和工廠方法模式對比

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

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

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

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

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

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

優(yōu)點:

1.它分離了具體的類

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

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

缺點:

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

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

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

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

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

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();
    }
}

下面是對象抽象出來的接口

public interface Size {
    public void getSize();
}

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

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é)

工廠模式可以分為:簡單工廠模式工廠方法模式,抽象工廠模式。

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

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

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

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

相關(guān)文章

  • java利用時間格式生成唯一文件名的方法

    java利用時間格式生成唯一文件名的方法

    這篇文章主要介紹了java利用時間格式生成唯一文件名的方法,需要的朋友可以參考下
    2017-01-01
  • SpringBoot實現(xiàn)登錄攔截器超詳細(xì)教程分享

    SpringBoot實現(xiàn)登錄攔截器超詳細(xì)教程分享

    對于管理系統(tǒng)或其他需要用戶登錄的系統(tǒng),登錄驗證都是必不可少的環(huán)節(jié),尤其在?SpringBoot?開發(fā)的項目中。本文為大家準(zhǔn)備了超詳細(xì)的SpringBoot實現(xiàn)登錄攔截器方法,快收藏一波吧
    2023-02-02
  • 詳解JAVA 字節(jié)流和字符流

    詳解JAVA 字節(jié)流和字符流

    這篇文章主要介紹了JAVA 字節(jié)流和字符流的的相關(guān)資料,文中講解非常的細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • Java 時間日期詳細(xì)介紹及實例

    Java 時間日期詳細(xì)介紹及實例

    這篇文章主要介紹了Java 時間日期詳細(xì)介紹及實例的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • JDK8并行流及串行流區(qū)別原理詳解

    JDK8并行流及串行流區(qū)別原理詳解

    這篇文章主要介紹了JDK8并行流及串行流區(qū)別原理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • Java使用openOffice對于word的轉(zhuǎn)換及遇到的問題解決

    Java使用openOffice對于word的轉(zhuǎn)換及遇到的問題解決

    開發(fā)過程中經(jīng)常會使用java將office系列文檔轉(zhuǎn)換為PDF, 一般都使用微軟提供的openoffice+jodconverter 實現(xiàn)轉(zhuǎn)換文檔,下面這篇文章主要給大家介紹了關(guān)于Java通過openOffice對于word的轉(zhuǎn)換及遇到問題的解決方法,需要的朋友可以參考下
    2018-09-09
  • Java線程中的關(guān)鍵字和方法示例詳解

    Java線程中的關(guān)鍵字和方法示例詳解

    這篇文章主要介紹了Java有關(guān)線程中的關(guān)鍵字和方法,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • SpringBoot實現(xiàn)發(fā)送郵件功能

    SpringBoot實現(xiàn)發(fā)送郵件功能

    這篇文章主要介紹了SpringBoot 發(fā)送郵件功能實現(xiàn),本文以163郵箱為例通過這個小案例給大家介紹,需要的朋友可以參考下
    2019-12-12
  • Java線程中的notifyAll喚醒操作(推薦)

    Java線程中的notifyAll喚醒操作(推薦)

    這篇文章主要介紹了Java線程中的notifyAll喚醒操作,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-03-03
  • JAVA提高第七篇 類加載器解析

    JAVA提高第七篇 類加載器解析

    這篇文章主要為大家詳細(xì)介紹了JAVA提高第七篇類加載器的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10

最新評論