舟山网站建设推广,北京南站到故宫最佳路线,世界上前端做的最好的网站,寮步网站仿做每个名副其实的Java程序员都知道Factory Pattern 。 这是一种便捷#xff0c;标准化的方法#xff0c;它通过教一个组件如何捕鱼而不是将它们交给它们来减少耦合。 但是#xff0c;在使用大型系统时#xff0c;该模式确实会向系统添加大量样板代码。 对于每个实体#xff… 每个名副其实的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接受FunctionColor Car 。为工厂指定接口的优势在于两者都更容易实现理解它允许您更改构造函数的参数而无需更改使用工厂的代码。 翻译自: https://www.javacodegeeks.com/2016/02/make-factories-beautiful.html