我注意到以下代码片段......
@Override
public boolean equals(Object otherObject) {
...
}
Run Code Online (Sandbox Code Playgroud)
......不允许的枚举,由于该方法equals(Object x)被定义为final在Enum.为什么会这样?
我想不出任何需要覆盖equals(Object)Enum的用例.我只是想知道这种行为背后的原因.
什么时候需要使用装饰模式?如果可能的话,给我一个非常适合该模式的真实世界示例.
查看以下(简化)类的层次结构:
> Email (base class)
> SimpleEmail extends Email
> HtmlEmail extends Email
Run Code Online (Sandbox Code Playgroud)
我需要修饰Email.send()以添加限制功能.我需要实例化SimpleEmail,HtmlEmail或其他类似的Email子类.
这个模式到底应该是什么样的?我的猜测(需要纠正)如下:
class abstract EmailDecorator
-> Define a constructor: EmailDecorator(Email component)
-> Implements all methods of Email and passes values through to component
-> Adds functionality to send() method
class SimpleEmailDecorator extends EmailDecorator
-> Define a constructor: SimpleEmailDecorator(SimpleEmail component)
-> Implement all methods of SimpleEmail and pass through to component
class HtmlEmailDirector extends EmaiDecorator
-> Same as SimpleEmailDecorator
Run Code Online (Sandbox Code Playgroud)
我的大脑并没有围绕我如何正确处理我需要"增强"的基类的重要现有子类.大多数示例将其简化为继承问题变得混乱的程度.