亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

 

概述

本文將解釋JAVA中的工廠設(shè)計模式:工廠方法和抽象工廠,并用實際例子來說明如何實現(xiàn)該模式。

工廠方法模式

比如為一家汽車制造商開發(fā)一款應(yīng)用程序。起初,該客戶制造的車輛僅使用燃油發(fā)動機。因此,為了遵循單一責任原則(SRP)和開閉原則(OCP),我們使用工廠方法設(shè)計模式。

 

工廠方法模式通過將產(chǎn)品的構(gòu)造代碼與使用該產(chǎn)品的代碼分離來解耦合。

首先,在我們的示例應(yīng)用程序中,定義了MotorVehicle接口。這個接口只有一個方法build(),用于制造特定的機動車輛:

public interface MotorVehicle {
    void build();
}

下一步是實現(xiàn)MotorVehicle接口的具體類。我們創(chuàng)造了兩種類型:摩托車和汽車:

public class Motorcycle implements MotorVehicle {
    @Override
    public void build() {
        System.out.println("Build Motorcycle");
    }
}

public class Car implements MotorVehicle {
    @Override
    public void build() {
        System.out.println("Build Car");
    }
}

然后,我們創(chuàng)建MotorVehicleFactory類。這個類負責創(chuàng)建每個新的車輛實例。它是一個抽象類,因為它為特定的工廠制造特定的車輛:

public abstract class MotorVehicleFactory {
    public MotorVehicle create() {
        MotorVehicle vehicle = createMotorVehicle();
        vehicle.build();
        return vehicle;
    }
    protected abstract MotorVehicle createMotorVehicle();
}

方法create()調(diào)用抽象方法createMotorVehicle()來創(chuàng)建特定類型的機動車輛,之前我們具有兩種類型的摩托車和汽車:

public class MotorcycleFactory extends MotorVehicleFactory {
    @Override
    protected MotorVehicle createMotorVehicle() {
        return new Motorcycle();
    }
}

public class CarFactory extends MotorVehicleFactory {
    @Override
    protected MotorVehicle createMotorVehicle() {
        return new Car();
    }
}

我們的應(yīng)用程序是使用工廠方法模式設(shè)計,現(xiàn)在就可以隨心所欲地增加新的機動車輛。最后,我們看看使用UML表示法的最終設(shè)計是什么樣子的:

 

抽象工廠模式

比如兩家新的汽車品牌公司對我們上面設(shè)計的系統(tǒng)感興趣:NextGen和FutureVehicle。這些新公司不僅生產(chǎn)純?nèi)剂掀嚕€生產(chǎn)電動汽車。每家公司都有自己的汽車設(shè)計,為了解決這些問題,我們可以使用抽象工廠模式,將產(chǎn)品創(chuàng)建代碼集中在一個地方。UML表示為:

 

我們已經(jīng)有了MotorVehicle接口。此外,必須添加一個接口來表示電動汽車:

public interface ElectricVehicle {
    void build();
}

接下來,我們創(chuàng)建抽象工廠。該類是抽象的,因為創(chuàng)建對象的責任將由具體工廠承擔。這種行為遵循OCP和SRP:

public abstract class Corporation {
    public abstract MotorVehicle createMotorVehicle();
    public abstract ElectricVehicle createElectricVehicle();
}

FutureVehicle公司生產(chǎn)的車輛:

public class FutureVehicleMotorcycle implements MotorVehicle {
    @Override
    public void build() {
        System.out.println("Future Vehicle Motorcycle");
    }
}

public class FutureVehicleElectricCar implements ElectricVehicle {
    @Override
    public void build() {
        System.out.println("Future Vehicle Electric Car");
    }
}

NexGen公司做了同樣的事情:

public class NextGenMotorcycle implements MotorVehicle {
    @Override
    public void build() {
        System.out.println("NextGen Motorcycle");
    }
}

public class NextGenElectricCar implements ElectricVehicle {
    @Override
    public void build() {
        System.out.println("NextGen Electric Car");
    }
}

FutureVehicle工廠:

public class FutureVehicleCorporation extends Corporation {
    @Override
    public MotorVehicle createMotorVehicle() {
        return new FutureVehicleMotorcycle();
    }
    @Override
    public ElectricVehicle createElectricVehicle() {
        return new FutureVehicleElectricCar();
    }
}

接下來是另一個NexGen工廠:

public class NextGenCorporation extends Corporation {
    @Override
    public MotorVehicle createMotorVehicle() {
        return new NextGenMotorcycle();
    }
    @Override
    public ElectricVehicle createElectricVehicle() {
        return new NextGenElectricCar();
    }
}

我們使用抽象工廠模式完成了實現(xiàn)。以下是我們自定義實現(xiàn)的UML圖:

 

結(jié)論

工廠方法使用繼承作為設(shè)計工具。而抽象工廠使用委托。

工廠方法依賴于派生類來實現(xiàn),基類提供預(yù)期的行為,它是在方法上,而不是在類上。而抽象工廠被應(yīng)用于一個類。

兩者都遵循OCP和SRP,產(chǎn)生了松散耦合的代碼,并為以后的更改擴展提供了更大的靈活性。

分享到:
標簽:Java
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定