Java 具有装饰器模式的MVC
在我从事的一个项目中,我们拥有严格的MVC结构。我正在考虑为那些我没有额外功能的实现在一些模式窗口(小弹出窗口)中添加一个装饰器模式 因此,我基本上有以下几点:Java 具有装饰器模式的MVC,java,oop,model-view-controller,design-patterns,decorator,Java,Oop,Model View Controller,Design Patterns,Decorator,在我从事的一个项目中,我们拥有严格的MVC结构。我正在考虑为那些我没有额外功能的实现在一些模式窗口(小弹出窗口)中添加一个装饰器模式 因此,我基本上有以下几点: SimpleModalWindowController.class SimpleModalWindowModel.class SimpleModalWindowView.class 编辑: 问题:对于新的ModalWindows实现,是否可以在此基础上实现一个装饰器模式,还是应该使用继承?我将有许多不同的窗口,我想在未来结合其中的一些
SimpleModalWindowController.class
SimpleModalWindowModel.class
SimpleModalWindowView.class
编辑:
问题:对于新的ModalWindows实现,是否可以在此基础上实现一个装饰器模式,还是应该使用继承?我将有许多不同的窗口,我想在未来结合其中的一些功能
如果我按照装饰者模式,哪个类是抽象类
是将上述所有类(如SimpleModel.class)组合在一起以将它们设置为抽象类的类,还是有多个抽象类?
我显然是这个模式的新手,只掌握了普通的OOP技能,所以请耐心等待
谢谢你的帮助
/Marthin我认为这不符合装饰图案的要求。您试图做的是创建带有专门化的继承层次结构(花式) 您不需要实现Decorator。如果这是为了解决设计问题,那么您的实现方式看起来不错。在这种情况下,您不必使用模式 这就是如何实现您不需要的装饰器。我是个C#guy,因此语法可能不完全正确
abstract class ModalWindowModel
{
protected ModalWindowModel modalWindowModel; //This can be any class implementing/derived from ModalWindowModel
}
class SimpleModalWindowModel extends ModalWindowModel
{
SimpleModalWindowModel(ModalWindowModel modalWindowModel)
{
this.modalWindowModel = modalWindowModel;
}
// your other code goes here
}
class FancyModalWindowModel extends ModalWindowModel
{
FancyModalWindowModel(ModalWindowModel modalWindowModel)
{
this.modalWindowModel = modalWindowModel;
}
// your other code goes here
}
...
// Usage
ModalWindowModel simpleModalWindowModel = new SimpleModalWindowModel(null);
ModalWindowModel fancyModalWindowModel = new FancyModalWindowModel(simpleModalWindowModel);
....
就我个人而言,我会作为一名装饰师来实现它。一般来说,我更喜欢组合而不是继承。因此,我会这样做:
class ExtendedModalWindowModel {
private ModalWindowModel model;
public ExtendedModalWindowModel(ModalWindowModel model) {
if (model == null) throw IllegalArgumentException("...");
this.model = model;
}
// delegate common methods to the parent
public int getSize() {
// you could also put additional functionality here...
return model.getSize();
}
// implement new functionality on the decorator
public void doNewThings() {
// ...
}
}
如果您的装饰类实现了tnterfaces,您也应该在装饰器中实现它们(但是仍然委托装饰实例来实现它们,除非您想要扩展或覆盖基本功能)
组合的一个很好的例子是java中I/O的实现:我认为这不符合装饰器模式。您试图做的是创建带有专门化的继承层次结构(花式)。