成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一篇讀懂Java工廠設計模式

開發 前端
我們的應用程序是使用工廠方法模式設計,現在就可以隨心所欲地增加新的機動車輛。最后,我們看看使用UML表示法的最終設計是什么樣子的。

概述

本文將解釋Java中的工廠設計模式:工廠方法和抽象工廠,并用實際例子來說明如何實現該模式。

工廠方法模式

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

工廠方法模式通過將產品的構造代碼與使用該產品的代碼分離來解耦合。

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

public interface MotorVehicle {
    void build();
}

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

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

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

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

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

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

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

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

抽象工廠模式

比如兩家新的汽車品牌公司對我們上面設計的系統感興趣:NextGen和FutureVehicle。這些新公司不僅生產純燃料汽車,還生產電動汽車。每家公司都有自己的汽車設計,為了解決這些問題,我們可以使用抽象工廠模式,將產品創建代碼集中在一個地方。UML表示為:

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

public interface ElectricVehicle {
    void build();
}

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

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

FutureVehicle公司生產的車輛:

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

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

結論

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

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

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

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2021-07-06 08:59:18

抽象工廠模式

2022-07-07 12:01:43

ATTCALDERA框架

2017-09-04 13:44:00

Java

2011-11-17 16:03:05

Java工廠模式Clojure

2019-09-24 14:19:12

PythonC語言文章

2017-06-08 22:41:34

框架標簽

2023-11-20 10:11:05

集群節點Kubernetes

2023-06-26 00:26:40

I/OJava字節流

2020-09-17 11:19:39

Linux 系統 數據

2021-05-09 09:06:24

Python批處理命令

2020-04-22 13:27:20

數據分析模塊解決

2018-04-09 16:35:10

數據庫MySQLInnoDB

2021-05-11 08:54:59

建造者模式設計

2021-07-14 10:08:30

責任鏈模式加工鏈

2022-01-12 13:33:25

工廠模式設計

2020-08-21 07:23:50

工廠模式設計

2021-03-06 22:50:58

設計模式抽象

2019-04-09 11:07:15

HTTPS加密安全

2021-10-26 10:40:26

代理模式虛擬

2021-07-28 10:02:54

建造者模式代碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲九九 | 极品的亚洲| 天堂成人av| 成人性视频免费网站 | 亚洲视频在线观看 | 亚洲午夜精品 | 在线国产欧美 | h视频在线播放 | av日韩高清| 一级毛片免费 | 91精品国产综合久久久久久首页 | 欧美久久一级 | 亚洲人人舔人人 | 日韩国产黄色片 | 51ⅴ精品国产91久久久久久 | 日本欧美在线 | 亚洲一区二区电影网 | 国产精品久久 | 中文精品视频 | 在线观看国产 | 欧美一区二区在线播放 | 嫩草视频在线看 | 精品国产乱码久久久久久图片 | 久久精品国产一区二区电影 | 国产成人免费视频网站视频社区 | 射久久| 色www精品视频在线观看 | 免费在线看黄视频 | 91看国产 | 欧美日韩综合一区 | 欧美成人自拍视频 | 国产精品免费小视频 | 亚洲欧美中文日韩在线v日本 | 国产精品美女久久久久久久久久久 | 日韩国产高清在线观看 | 一区二区三区在线播放 | 久久69精品久久久久久久电影好 | 三区在线| 毛片久久久 | 精品乱人伦一区二区三区 | 欧美激情国产日韩精品一区18 |