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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

让工厂美丽

發布時間:2023/12/3 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 让工厂美丽 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

每個名副其實的Java程序員都知道Factory Pattern 。 這是一種便捷,標準化的方法,它通過教一個組件如何捕魚而不是將它們交給它們來減少耦合。 但是,在使用大型系統時,該模式確實會向系統添加大量樣板代碼。 對于每個實體,您都需要許多不同的工廠來產生該實體的不同實現,這既麻煩又不需要編寫。 這只是我們在Speedment中使用的許多新模式之一 。

這是一個典型的示例,您希望汽車商人能夠在不知道確切實現的情況下創建Car接口的實例。

汽車.java

public abstract class Car {private final Color color;public interface Factory {Car make(Color color);}protected Car(Color color) {this.color = color;}public abstract String getModel();public abstract int getPrice(); }

沃爾沃

public final class Volvo extends Car {public Volvo(Color color) {super(color);}public String getModel() { return "Volvo"; }public int getPrice() { return 10_000; } // USD }

特斯拉

public final class Tesla extends Car {public Tesla(Color color) {super(color);}public String getModel() { return "Tesla"; }public int getPrice() { return 86_000; } // USD }

VolvoFactory.java

public final class VolvoFactory implements Car.Factory {public Car make(Color color) { return new Volvo(color); } }

TeslaFactory.java

public final class TeslaFactory implements Car.Factory {public Car make(Color color) { return new Tesla(color); } }

CarTrader.java

public final class CarTrader {private Car.Factory factory;private int cash;public void setSupplier(Car.Factory factory) {this.factory = factory;}public Car buyCar(Color color) {final Car car = factory.make(color);cash += car.getPrice();return car;} }

Main.java

...final CarTrader trader = new CarTrader();trader.setSupplier(new VolvoFactory());final Car a = trader.buyCar(Color.BLACK);final Car b = trader.buyCar(Color.RED);trader.setSupplier(new TeslaFactory());final Car c = trader.buyCar(Color.WHITE);...

您可能尚未注意到的一件事是,大多數這些組件在Java 8及更高版本中都是多余的。 由于工廠接口可能被視為@FunctionalInterface我們不需要工廠,因此我們只需指定實現類的構造函數作為方法參考即可!

汽車.java

public abstract class Car {private final Color color;@FunctionalInterfacepublic interface Factory {Car make(Color color);} }

Main.java

...trader.setSupplier(Volvo::new);trader.setSupplier(Tesla::new);...

注意,實現類Volvo和Tesla不需要更改。 這兩個工廠現在都可以拆除了,剩下的就是更為具體的系統!

(對于像這樣的簡單示例,根本不需要工廠接口。您也可以使CarTrader接受Function<Color , Car> 。為工廠指定接口的優勢在于,兩者都更容易實現理解,它允許您更改構造函數的參數,而無需更改使用工廠的代碼。)

翻譯自: https://www.javacodegeeks.com/2016/02/make-factories-beautiful.html

總結

以上是生活随笔為你收集整理的让工厂美丽的全部內容,希望文章能夠幫你解決所遇到的問題。

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