简单工厂抽象工厂工厂方法_让工厂美丽
簡單工廠抽象工廠工廠方法
每個名副其實(shí)的Java程序員都知道Factory Pattern 。 這是一種便捷,標(biāo)準(zhǔn)化的方法,它通過教一個組件如何捕魚而不是將它們交給它們來減少耦合。 但是,在使用大型系統(tǒng)時,該模式確實(shí)會向系統(tǒng)添加很多樣板代碼。 對于每個實(shí)體,您都需要許多不同的工廠來產(chǎn)生該實(shí)體的不同實(shí)現(xiàn),這既麻煩又不需要編寫。 這只是我們在Speedment中使用的許多新模式之一 。
這是一個典型的示例,您希望汽車商人能夠在不知道確切實(shí)現(xiàn)的情況下創(chuàng)建Car接口的實(shí)例。
汽車.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);...您可能尚未注意到的一件事是,大多數(shù)這些組件在Java 8及更高版本中都是多余的。 由于工廠接口可能被視為@FunctionalInterface我們不需要工廠,因此我們只需指定實(shí)現(xiàn)類的構(gòu)造函數(shù)作為方法參考即可!
汽車.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);...注意,實(shí)現(xiàn)類Volvo和Tesla不需要更改。 這兩個工廠現(xiàn)在都可以拆除了,剩下的就是更為具體的系統(tǒng)!
(對于像這樣的簡單示例,根本不需要工廠接口。您也可以使CarTrader接受Function<Color , Car> 。為工廠指定接口的優(yōu)點(diǎn)在于,兩者都更容易實(shí)現(xiàn)理解,它允許您更改構(gòu)造函數(shù)的參數(shù),而無需更改使用工廠的代碼。)
翻譯自: https://www.javacodegeeks.com/2016/02/make-factories-beautiful.html
簡單工廠抽象工廠工廠方法
總結(jié)
以上是生活随笔為你收集整理的简单工厂抽象工厂工厂方法_让工厂美丽的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓消息推送(安卓 消息推送)
- 下一篇: findfirst_当心findFirs