- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
下面是我编写的用于重写类方法(使用组合)的代码的简化版本,在本例中,我要重写的方法名称是 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
}
}
最佳答案
另一种可能性是将其称为代理。 装饰器和代理在技术上非常相似 - 区别在于 - 在大多数情况下 - 不是技术上的而是基于意图的。您的示例有点小,因此很难正确猜测其意图。
编辑
在详细级别:Screen
和 SubScreen
不共享任何代码。如果您开始向这两个实现和公共(public)接口(interface)添加方法AddComponents
,您可能会发现
Screen
和 SubScreen
中复制代码(或委托(delegate)给 Screen
),并且AddComponents
添加方法,这会使该接口(interface)的命名很糟糕。如果两个屏幕类在抽象逻辑级别和实现级别上都相似,那么具有两个派生类的AbstractScreen
类会更好。要恢复模式,请说:在 AbstractScreen
中使用工厂方法来专门化不同按钮的行为。
在您当前的代码中,有一件奇怪的事情:为什么要定义一个方法 addButton
?只需在适当的构造函数中添加按钮即可,因为用户在任何情况下都必须调用 addButtons
并且该方法没有参数。
另一点没有解释的是:SubScreen
具有对未使用的 Screen
的引用。为什么?所有涉及的类Screen
、SubScreen
和AddComponents
中是否都会有更多的方法?每个方法都是 SubScreen
中委托(delegate)给 Screen
还是只是其中的一半?
你看,有很多可能性我们不知道,也没有在示例代码中显示,但它们非常重要。我确信你的脑子里包含了很多细节,说“这个提议的东西不会起作用,因为我想在不久的将来以这样或那样的方式做这做那”。遗憾的是,如果没有更多的文字,我们无法将您头脑中的内容放入此站点。 :-)
关于java - 这是装饰器模式的变体还是根本就是一种模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7666972/
我遇到了一个似乎很独特的问题。我的 NSUbiquitousKeyValueStore 在模拟器中的启动之间根本不起作用。也就是说,我什至不是在谈论 iCloud 同步或类似的东西,我无法让它通过下面
首先,我使用的是 WiX 版本 3.5.2519.0,但我也在最新的 3.6 版本上测试了它,结果相同。 我很难确定 PatchFamily 究竟能过滤掉 torch 生成的差异的某些部分。按照手册中
我可以获取要呈现的“帮助主题”标题,但无法获取我定义的任何FIXTURES。 {{#each model}} 中的任何内容都不会渲染。这是我第一次使用 Ember,所以任何东西(字面意义上的任何东
我一直在尝试设置custom ajaxTransports for jQuery在我们的产品的某些场景下缩短某些工作流程。然而,我在让这些传输受到尊重方面取得了零成功(而我有很多工作 custom a
为什么纯无类型 lambda 演算经常被描述为无法使用? 有了合适的函数库,它会不会与任何其他函数式语言大致相同? 最佳答案 速度不是大问题。例如,您可以决定使用教堂数字但优化实现,以便像往常一样表示
我是一名优秀的程序员,十分优秀!