下面是我编写的代码的简化版本,用于覆盖类方法(使用组合),在这种情况下,方法名称我覆盖的是addbuttons(); “Screen”类将按钮添加到屏幕,而“SubScreen”类将自定义按钮添加到Screen的实例。也许这不是装饰模式的一个例子,因为我重写功能而不是扩展它?有没有更好的方法(使用设计模式?)来实现相同的功能?
public class Driver {
public static void main(String args[]){
AddComponents add1 = new Screen();
add1.addButtons();
Screen newScreen = new Screen();
AddComponents add2 = new SubScreen(newScreen);
add2.addButtons();
}
}
public interface AddComponents {
public void addButtons();
}
public class Screen implements AddComponents{
public void addButtons() {
//Add Buttons to screen class
}
}
public class SubScreen implements AddComponents{
private Screen screen;
public SubScreen(Screen screen){
this.screen = screen;
}
public void addButtons() {
//add different custom buttons to Screen class
}
}
答案 0 :(得分:3)
另一种可能性是将其称为代理。 装饰器和代理在技术上非常相似 - 不同之处在于 - 在大多数情况下 - 不是技术性的,而是基于意图。 你的例子有点微小,因此很难正确地猜出这个意图。
修改强>
在详细级别:Screen
和SubScreen
不共享任何代码。如果您开始向两个实现和公共接口AddComponents
添加方法,您可能会找到
Screen
和SubScreen
(或委托给Screen
)和AddComponents
添加方法,使这个界面名称错误。如果两个屏幕类在实现级别的抽象逻辑级别和上都相似,则具有两个派生类别的类AbstractScreen
会更好。要恢复模式说话:在AbstractScreen
中使用工厂方法来专门化关于不同按钮的行为。
在您当前的代码中有一个奇怪的事情:为什么还有一个方法addButton
被定义了?只需在相应的构造函数中添加按钮,因为用户在任何情况下都必须调用addButtons
,并且该方法没有参数。
另一个未解释的问题是:SubScreen
引用了Screen
未使用的内容。为什么?所有涉及的课程Screen
,SubScreen
和AddComponents
中是否会有更多方法?每个方法是SubScreen
委托给Screen
还是只有一半?
你知道 - 我们不知道有很多可能性,并且没有在示例代码中显示但是非常重要。我确信你的头脑里有很多细节说“这个提议的东西不会起作用,因为我想在不久的将来以这种方式做到这一点。”遗憾的是,如果没有更多的写作,我们无法将您的内容带入这个网站。 : - )