溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java工廠模式分為哪幾種

發(fā)布時間:2022-01-05 15:24:46 來源:億速云 閱讀:126 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“java工廠模式分為哪幾種”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“java工廠模式分為哪幾種”吧!

定義

        工廠模式是 Java 中最常用的設計模式之一。這種類型的設計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式。

        工廠模式主要是為創(chuàng)建對象提供過渡接口,以便將創(chuàng)建對象的具體過程屏蔽隔離起來,達到提高靈活性的目的。

工廠模式根據(jù)抽象程度的不同分為三種:

簡單工廠模式(也叫靜態(tài)工廠模式)

工廠方法模式(也叫多形性工廠)

抽象工廠模式(也叫工具箱)

簡單工廠模式

        實質是由一個工廠類根據(jù)傳入的參數(shù),動態(tài)決定應該創(chuàng)建哪一個產(chǎn)品類(這些產(chǎn)品類繼承自一個父類或接口)的實例。簡單工廠模式的創(chuàng)建目標,所有創(chuàng)建的對象都是充當這個角色的某個具體類的實例。

工廠方法模式

        工廠方法是粒度很小的設計模式,因為模式的表現(xiàn)只是一個抽象的方法。 提前定義用于創(chuàng)建對象的接口,讓子類決定實例化具體的某一個類,即在工廠和產(chǎn)品中間增加接口,工廠不再負責產(chǎn)品的創(chuàng)建,由接口針對不同條件返回具體的類實例,由具體類實例去實現(xiàn)。

抽象工廠模式

        當有多個抽象角色時使用的一種工廠模式。抽象工廠模式可以向客戶端提供一個接口,使客戶端在不必指定產(chǎn)品的具體的情況下,創(chuàng)建多個產(chǎn)品對象。它有多個抽象產(chǎn)品類,每個抽象產(chǎn)品類可以派生出多個具體產(chǎn)品類,一個抽象工廠類,可以派生出多個具體工廠類,每個具體工廠類可以創(chuàng)建多個具體產(chǎn)品類的實例。

工廠方法模式應該在實際中用的較多,我們以工廠方法模式舉例

(例子來源百度,幫助理解)

 抽象的產(chǎn)品類:定義car  交通工具類

public interface Car {    
   void gotowork(); }

定義實際的產(chǎn)品類,總共定義兩個,bike 和bus 分別表示不同的交通工具類

public class Bike implements Car {
    @Override
    public void gotowork() {
        System.out.println("騎自行車去上班!");
    }
}
public class Bus implements Car {
    @Override
    public void gotowork() {
        System.out.println("坐公交車去上班!");
    }
}

定義抽象的工廠接口

public interface ICarFactory {
    Car getCar();
}

具體的工廠子類,分別為每個具體的產(chǎn)品類創(chuàng)建不同的工廠子類

public class BikeFactory implements ICarFactory {
    @Override
    public Car getCar() {
        return new Bike();
    }
}
public class BusFactory implements ICarFactory {    
@Override    public Car getCar() {        
       return new Bus();    } }

簡單的測試類,來驗證不同的工廠能夠產(chǎn)生不同的產(chǎn)品對象

public class TestFactory {
    @Test
    public void test() {
        ICarFactory factory = null;
        // bike
        factory = new BikeFactory();
        Car bike = factory.getCar();
        bike.gotowork();

        // bus
        factory = new BusFactory();
        Car bus = factory.getCar();
        bus.gotowork();
    }
}

工廠模式的優(yōu)點:

        1、一個調(diào)用者想創(chuàng)建一個對象,只要知道其名稱就可以了,降低了耦合度。

        2、擴展性高,如果想增加一個產(chǎn)品,只要擴展一個工廠類就可以。使得代碼結構更加清晰。

        3、屏蔽產(chǎn)品的具體實現(xiàn),調(diào)用者只關心產(chǎn)品的接口。

工廠模式的缺點:

        每次增加一個產(chǎn)品時,都需要增加一個具體類和對象實現(xiàn)工廠(這里可以使用反射機制來避免),使得系統(tǒng)中類的個數(shù)成倍增加,在一定程度上增加了系統(tǒng)的復雜度,同時也增加了系統(tǒng)具體類的依賴。所以對于簡單對象來說,使用工廠模式反而增加了復雜度。

工廠模式的適用場景:

        1,  一個對象擁有很多子類。

        2,  創(chuàng)建某個對象時需要進行許多額外的操作。

        3,  系統(tǒng)后期需要經(jīng)常擴展,它把對象實例化的任務交由實現(xiàn)類完成,擴展性好。

關于Java中的工廠模式的一些常見問題:

        利用父類的向下轉型(使用父類類型的引用指向子類的對象)是可以達到類似于工廠模式的效果的,那為什么還要用工廠模式呢?

        把指向子類對象的父類引用賦給子類引用叫做向下轉型,如:

Class Student extends Person     
Person s = new Student();    
s = (Student)person ;

        使用向下轉型在客戶端實例化子類的時候,嚴重依賴具體的子類的名字。當我們需要更改子類的構造方法的時候,比如增加一個參數(shù),或者更改了子類的類名,所有的new出來的子類都需要跟著更改。   

        但如果我們使用工廠模式,我們僅僅需要在工廠中修改一下new的代碼,其余項目中用到此實例的都會跟著改,而不需要我們手動去操作。

到此,相信大家對“java工廠模式分為哪幾種”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關內(nèi)容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI