【发布时间】:2016-08-21 12:18:57
【问题描述】:
我有一个“标准”JPanel,里面有两个面板。我试图创建一种模板类,然后扩展它并实现内容。问题是哪种方法可以实现它。
下面的代码是我试图让它工作的代码,但我刚刚开始阅读 Effective Java 书,我不熟悉静态工厂方法。特别想把它们抽象出来。
我特别想遵循的书中的一些提示是
- 考虑静态工厂方法而不是构造函数
- 优先组合优于继承
- 首选接口而不是抽象类
但我找不到关于这些点的好的解决方案(没有它们:P)。
public abstract class CentralPage {
static JPanel getInstance() {
JPanel container = new JPanel();
container.setBackground(Color.white);
container.setBorder(
BorderFactory.createCompoundBorder(new LineBorder(Color.BLACK), new EmptyBorder(10, 10, 10, 10)));
container.setMinimumSize(new Dimension(960, 400));
container.setPreferredSize(new Dimension(960, 400));
container.setLayout(new BoxLayout(container, BoxLayout.Y_AXIS));
JPanel up = getUp(container);
container.add(up);
JPanel down = getDown(container);
container.add(down);
return container;
}
abstract JPanel getDown(JPanel container);
abstract JPanel getUp(JPanel container);
}
如果您需要有关代码其他部分的更多信息,请随时询问。
【问题讨论】:
-
你想解决什么problem
-
我想,我有一个带有默认静态工厂方法的抽象类,但不可能在抽象类上添加静态方法。所以我试图找到标准的解决方法。更好?
-
提供静态工厂方法而不是构造函数的基本思想是隐藏实现。这些实现隐藏在私有或匿名类的某个地方。您的方法看起来更像抽象工厂方法。您应该提供一个通用的工厂界面,然后可以使用它来自定义您的面板。尽管如此,如果需要,您仍然可以将工厂方法的“默认”实现作为静态方法提供。
-
@kaetzacoatl 我想我不明白你的解决方案。如何提供带有接口的默认实现?请根据您的建议创建一个答案。
标签: java swing static-methods factory-pattern effective-java