Java 这是装饰图案的变体还是一种图案?
下面是我为重写类方法(使用组合)而编写的代码的简化版本,在本例中,我重写的方法名是addbuttons();类“Screen”向屏幕添加按钮,而类“SubScreen”向屏幕实例添加自定义按钮。也许这不是装饰模式的一个例子,因为我覆盖了功能而不是扩展它?有没有更好的方法(使用设计模式)来实现相同的功能Java 这是装饰图案的变体还是一种图案?,java,design-patterns,Java,Design Patterns,下面是我为重写类方法(使用组合)而编写的代码的简化版本,在本例中,我重写的方法名是addbuttons();类“Screen”向屏幕添加按钮,而类“SubScreen”向屏幕实例添加自定义按钮。也许这不是装饰模式的一个例子,因为我覆盖了功能而不是扩展它?有没有更好的方法(使用设计模式)来实现相同的功能 public class Driver { public static void main(String args[]){ AddComponents add1 = ne
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
}
}
另一种可能是称之为代理。Decorator和Proxy在技术上非常相似——区别在于——在大多数情况下——不是技术上的,而是基于意图。 您的示例有点小,因此很难正确猜测意图 编辑 在详细级别:
屏幕
和子屏幕
不共享任何代码。如果开始向实现和公共接口添加方法,您可能会发现
- 您必须在
和屏幕
(或委托给子屏幕
)中复制代码,并且屏幕
- 您必须将方法添加到
,这些方法会使此接口命名错误AddComponents
AbstractScreen
会更好。要恢复模式发言:使用AbstractScreen
中的工厂方法专门化不同按钮的行为
在您当前的代码中有一件奇怪的事情:为什么要定义一个方法addButton
?只需在适当的构造函数中添加按钮,因为用户在任何情况下都必须调用addButtons
,并且该方法没有参数
另一个未解释的点是:子屏幕
引用了未使用的屏幕
。为什么?在所有涉及的类屏幕
、子屏幕
和添加组件
中是否会有更多的方法?每个方法是在子屏幕
中委托给屏幕
还是仅一半
你看,有很多我们不知道的可能性,在示例代码中没有显示,但是非常重要。我敢肯定你的脑袋里有很多细节,上面写着“这个提议的东西行不通,因为我想在不久的将来这样那样做。”遗憾的是,如果没有更多的文字,我们无法将你脑袋里的内容放到这个网站上。:-) 另一种可能是称之为代理。Decorator和Proxy在技术上非常相似——区别在于——在大多数情况下——不是技术上的,而是基于意图。 您的示例有点小,因此很难正确猜测意图 编辑 在详细级别:
屏幕
和子屏幕
不共享任何代码。如果开始向实现和公共接口添加方法,您可能会发现
- 您必须在
和屏幕
(或委托给子屏幕
)中复制代码,并且屏幕
- 您必须将方法添加到
,这些方法会使此接口命名错误AddComponents
AbstractScreen
会更好。要恢复模式发言:使用AbstractScreen
中的工厂方法专门化不同按钮的行为
在您当前的代码中有一件奇怪的事情:为什么要定义一个方法addButton
?只需在适当的构造函数中添加按钮,因为用户在任何情况下都必须调用addButtons
,并且该方法没有参数
另一个未解释的点是:子屏幕
引用了未使用的屏幕
。为什么?在所有涉及的类屏幕
、子屏幕
和添加组件
中是否会有更多的方法?每个方法是在子屏幕
中委托给屏幕
还是仅一半
你看,有很多我们不知道的可能性,在示例代码中没有显示,但是非常重要。我敢肯定你的脑袋里有很多细节,上面写着“这个提议的东西行不通,因为我想在不久的将来这样那样做。”遗憾的是,如果没有更多的文字,我们无法将你脑袋里的内容放到这个网站上。:-) 谢谢,我刚读过,现在看来我是代理了。我的意图是根据用户选择的菜单项向同一GUI屏幕添加不同的按钮,这是否足够?您描述了从外部看到的代码意图——“此代码将实现什么?”意图。但是像Decorator这样的设计模式在这个层次上并不存在。我的目标是“代码如何实现这个目标?”的意图。在这个层面上,提到的设计模式很重要。我在问题中发布的代码中是否没有描述其意图?你们能给我一个例子说明你们所说的“意图”是什么意思吗?仅供参考:我编辑了两次,试图解释我的意图是什么。标准书[设计模式][是一本标准书,因为它不仅从技术层面上描述了模式,还从各种半技术的角度详细解释了每个模式。谢谢,我刚刚读过,现在在我看来似乎是代理。我的意图是根据用户选择的菜单项向同一GUI屏幕添加不同的按钮,这就足够了吗?你知道吗从外部描述代码的意图——“此代码将实现什么?”意图