java 工厂方法模式_Java中的工厂方法模式
java 工廠方法模式
在上一篇有關模板方法模式的文章中 ,我展示了如何利用lambda表達式和默認方法 。 在本文中,我將探討工廠方法模式,并了解如何利用方法引用,這是Java 8中與lambda表達式一起添加的另一項功能。
讓我們考慮一個Vehicle接口及其兩個實現,即Car和Vehicle 。
為了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實現使用。
翻譯自: https://www.javacodegeeks.com/2013/05/factory-method-pattern-in-java.html
java 工廠方法模式
總結
以上是生活随笔為你收集整理的java 工厂方法模式_Java中的工厂方法模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux mac地址怎么查(linux
- 下一篇: ddos压力测试源码(ddos压力测试