日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java 设计模式之工厂模式(二)

發布時間:2024/8/26 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 设计模式之工厂模式(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文地址:Java 設計模式之工廠模式(二)
博客地址:http://www.extlight.com

一、背景

本篇內容是 Java 設計模式創建型模式的第二篇。上一篇主題為 《Java 設計模式之單例模式(一)》

二、簡單介紹

在介紹工廠模式之前,我們需要了解設計模式中應該遵循的原則。

五大原則:

1) 單一職責原則(SRP):就一個類而言,應該僅有一個引起它變化的原因。即一個類中應該只有一類邏輯。

2) 開放-封閉原則(OCP):軟件實體(類、模塊、函數等等)應該可以擴展,但是不可修改。即開放擴展,封閉修改。

3) 依賴倒轉原則(DIP):高層模塊不應該依賴底層模塊。兩個都應該依賴抽象;抽象不應該依賴細節。細節應該依賴抽象。即面向接口編程,而不是面向實現編程。

4) 里氏代換原則(LSP):子類型必須能夠替換掉他們的父類型。

5) 合成/聚合復用原則(CARP):盡量使用合成/聚合,盡量不要使用類繼承。

迪米特法則:如果兩個類不必彼此直接通信,那么這兩個類就不應當發生直接的相互作用。如果其中一個類需要調用另一個類的某一方法的話,可以通過第三者轉發這個調用

三、實現方式

工廠模式有 3 種:簡單工廠模式、工廠方法模式和抽象工廠模式。

本篇文章只講解簡單工廠模式、工廠方法模式。因為簡單工廠模式和工廠方法模式是針對單獨一類產品的創建方式,而抽象工廠模式是針對產品族考慮。

我們以創建轎車為例,未使用工廠模式:

public abstract class Car {public abstract void run(); }public class Benz extends Car {@Overridepublic void run() {System.out.println("開奔馳");}}public class Bmw extends Car{@Overridepublic void run() {System.out.println("開寶馬");}}public class Client {public static void main(String[] args) {Car car1 = new Benz();car1.run();Car car2 = new Bmw();car2.run();} }

在 Client 類中既有創建對象邏輯又有調用方法邏輯,且與多個類發生耦合。違背了單一職責原則和迪米特法則。

UML 類圖表示如下:

3.1 簡單工廠模式

簡單工廠模式屬于類的創建型模式,又叫做靜態工廠方法模式。通過專門定義一個類來負責創建其他類的實例,被創建的實例通常都具有共同的父類。

工廠類:

public class CarFactory {public static Car createCar(String type) {Car car = null;switch (type) {case "benz":car = new Benz();break;case "bmw":car = new Bmw();break;}return car;} }

客戶端調用:

public class Client {public static void main(String[] args) {Car car1 = CarFactory.createCar("benz");car1.run();Car car2 = CarFactory.createCar("bmw");car2.run();} }

總結:Client 類與 Car 的子類解耦,它不需要知道 Car 實例具體創建細節,只需要通知工廠類需要怎樣的實例。這樣,減少了與外部類(Car 的子類)的通信,遵循了迪米特法則。

UML 類圖表示如下:

3.2 工廠方法模式

簡單工廠模式設計和使用非常簡單。當我們需要新品牌的車子(如:奧迪)時,只需要在 CarFactory 的靜態方法中添加一個判斷即可。但是,這種寫法違背了開放封閉原則,我們在編碼是盡量不要修改業務代碼。

為了解決這一問題,我們可以使用工廠方法模式。

工廠方法模式同樣屬于類的創建型模式又被稱為多態工廠模式。工廠方法模式的意義是定義一個創建產品對象的工廠接口,將實際創建工作推遲到子類當中。

創建父類工廠:

public interface CarFactory {Car createCar(); }

工廠實現類:

public class BenzFactory implements CarFactory {@Overridepublic Car createCar() {return new Benz();}}public class BmwFactory implements CarFactory {@Overridepublic Car createCar() {return new Bmw();}}

客戶端調用:

public class Client {public static void main(String[] args) {CarFactory cf1 = new BenzFactory();Car car1 = cf1.createCar();car1.run();CarFactory cf2 = new BmwFactory();Car car2 = cf2.createCar();car2.run();} }

當我們需要添加奧迪車時,創建 Audi 實體類繼承 Car 和 AudiFactory 工廠類去實現 CarFactory 接口方法即可。

總結:不用修改業務代碼,只需創建新的類即可實現功能擴展,遵循了開放封閉原則。但是,Client 類中出現創建對象邏輯,違背責任單一原則。每新增一類產品就需要創建 N 個類文件,增加項目結構的復雜度。

UML 類圖表示如下:

轉載于:https://www.cnblogs.com/moonlightL/p/7798124.html

總結

以上是生活随笔為你收集整理的Java 设计模式之工厂模式(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。