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

歡迎訪問 生活随笔!

生活随笔

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

java

java 工厂方法模式_Java中的工厂方法模式

發布時間:2023/12/3 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 工厂方法模式_Java中的工厂方法模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java 工廠方法模式

在上一篇有關模板方法模式的文章中 ,我展示了如何利用lambda表達式和默認方法 。 在本文中,我將探討工廠方法模式,并了解如何利用方法引用,這是Java 8中與lambda表達式一起添加的另一項功能。

讓我們考慮一個Vehicle接口及其兩個實現,即Car和Vehicle 。

interface Vehicle{public void drive();public void clean(); } class Car implements Vehicle{@Overridepublic void drive(){System.out.println("Driving a car...");}@Overridepublic void clean(){System.out.println("Cleaning a car...");} } class Bus implements Vehicle{@Overridepublic void drive(){System.out.println("Driving a Bus...");}@Overridepublic void clean(){System.out.println("Cleaning a Bus...");} }

為了drive()和clean() Vehicle我們將使用VehicleDriver 。

Java 7及更低版本中的實現

讓我們從Java 8之前的版本(即Java 7和更低版本)的角度考慮VehicleDriver的實現和實現。

abstract class VehicleDriver{public abstract Vehicle getVehicle();public void driveVehicle(){getVehicle().drive();}public void cleanVehicle(){getVehicle().clean();} } class CarDriver extends VehicleDriver{@Overridepublic Vehicle getVehicle(){return new Car();} }class BusDriver extends VehicleDriver{@Overridepublic Vehicle getVehicle(){return new Bus();} }

在上述VehicleDriver實現中, getVehicle()方法是工廠方法,被CarDriver和Busdriver覆蓋以分別返回Car和Bus實例。 這樣,程序員將更加關注使用VehicleDriver抽象,而不必關注其不同的實現。 還有另一種相關的模式: 工廠模式 ,它與該模式略有不同,讀者不應將其與該模式混淆。 好的,讓我們快速看一下如何使用它,然后再進行其Java 8變體:

public class FactoryMethodPattern {public static void main(String[] args) {handleVehicle(new CarDriver());handleVehicle(new BusDriver());}static void handleVehicle(VehicleDriver2 vDriver){System.out.println("Handling a new vehicle. Pre lambda way");vDriver.driveVehicle();vDriver.cleanVehicle();} }

輸出為:

Handling a new vehicle. Pre lambda way Driving a car... Cleaning a car... Handling a new vehicle. Pre lambda way Driving a Bus... Cleaning a Bus...

利用Java 8

首先,我們不需要抽象的VehicleDriver及其2種不同的實現。 取而代之的是,我們使用帶有 VehicleDriver 接口的方法來創建VehicleDriver抽象,如下所示:

interface VehicleDriver{public Vehicle getVehicle();public default void driveVehicle(){getVehicle().drive();}public default void cleanVehicle(){getVehicle().clean();} }

現在來看有趣的部分-使用方法引用,而不是創建VehicleDriver不同實現。 這些方法引用為代碼提供了一種獲取所需的Car或Bus類實例的方法,而無需陷入重寫getVehicle()方法的麻煩。 困惑? 好奇? 讓我們看看如何實現這一目標:

public class FactoryMethodPatternLambda {public static void main(String[] args) {handleVehicle(Car::new);handleVehicle(Bus::new);}static void handleVehicle(VehicleDriver vDriver){System.out.println("Handling a new vehicle...");vDriver.driveVehicle();vDriver.cleanVehicle();} }

輸出為:

Handling a new vehicle... Driving a car... Cleaning a car... Handling a new vehicle... Driving a Bus... Cleaning a Bus...

我們只提供了一個Vehicle來處理handleVehicle方法,而不用擔心它是如何被處理或由誰來處理的。 但是在Java 7中以及在實現之前,我們必須意識到有一些VehicleDriver抽象類,然后我們必須重寫其某些方法,然后創建該擴展類的實例。 通過顯示此示例,我的主要目的是可以利用Java 8功能來創建更簡潔易用的API。 但是,隨著所有新功能的出現,學習曲線也隨之增加。

注意:在上述兩種實現中,共同的部分是Vehicle , Car和Bus類,它們由Java 7和Java 8實現使用。

參考: JCG合作伙伴 Mohamed Sanaulla在Javas中的Factory Method模式,來自Experiences Unlimited博客。

翻譯自: https://www.javacodegeeks.com/2013/05/factory-method-pattern-in-java.html

java 工廠方法模式

總結

以上是生活随笔為你收集整理的java 工厂方法模式_Java中的工厂方法模式的全部內容,希望文章能夠幫你解決所遇到的問題。

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