我正在设计一个使用工厂设计模式的简单应用程序。我正在关注->这个<-示例。我想知道如何使工厂类可扩展?在给出的示例中,如果他想添加一个 Mac 按钮,则必须修改工厂类代码。我怎样才能做到这一点,这样就没有必要了?
有没有办法扩展工厂类的功能而不会覆盖其原始方法从而失去该功能?或者也许有一种方法可以使对象创建完全动态(使用重载方法?)以便工厂类不需要依赖条件语句?
我正在设计一个使用工厂设计模式的简单应用程序。我正在关注->这个<-示例。我想知道如何使工厂类可扩展?在给出的示例中,如果他想添加一个 Mac 按钮,则必须修改工厂类代码。我怎样才能做到这一点,这样就没有必要了?
有没有办法扩展工厂类的功能而不会覆盖其原始方法从而失去该功能?或者也许有一种方法可以使对象创建完全动态(使用重载方法?)以便工厂类不需要依赖条件语句?
答案取决于工厂在做什么,但在提供的示例中,您可以这样做:
package tips.pattern.factory;
public class ButtonFactory {
private final Map<String, Button> osToButton;
public ButtonFactory(Map<String, Button> osToButton) {
this.osToButton = osToButton;
}
public Button createButton(String os){
return this.osToButton.get(os);
}
}