向界面装饰器模式添加功能
Adding function to interface decorator pattern
你好,
我正在努力思考装饰器模式,但我不确定某些事情:
当我想添加新功能时,将功能添加到界面被认为是一种不好的做法或滥用模式?
比如我有一个汽车界面,我想用装饰让它变成水陆两用,是否允许在界面上添加一个getAquaticSpeed()
功能仅用于添加此功能?
提前致谢!
代码示例:
interface Car{
public float getSpeed();
}
public class CarFrame implements Car{
public float getSpeed(){return 0;}
}
public abstract CarDecorator implements Car{
private Car delegate;
public CarDecorator(Car delegate){
this.delegate = delegate
}
public float getSpeed(){return delegate.getSpeed();}
}
如果我想为我的汽车添加水上速度、颜色等,是否允许在我的主界面中添加新功能?
像这样:
interface Car{
public float getSpeed();
public float getAquaticSpeed();
public String getColor();
}
您当然可以添加装饰器的 API,使其成为它包装的对象中接口的超集。 GoF书Decorator章节的第一句话是,
Intent
Attach additional responsibilities to an object dynamically.
本书第 177 页的 UML 结构显示了具有 addedState
和 AddedBehavior()
的具体装饰器,因此通过添加函数来附加责任是完全可以接受的。
关于编辑,否不能修改之前的界面。那会违反单一职责原则,Open/Closed原则,除此之外,它与装饰者模式无关。如果你编辑原来的界面,装饰器是没有用的。
你好,
我正在努力思考装饰器模式,但我不确定某些事情:
当我想添加新功能时,将功能添加到界面被认为是一种不好的做法或滥用模式?
比如我有一个汽车界面,我想用装饰让它变成水陆两用,是否允许在界面上添加一个getAquaticSpeed()
功能仅用于添加此功能?
提前致谢!
代码示例:
interface Car{
public float getSpeed();
}
public class CarFrame implements Car{
public float getSpeed(){return 0;}
}
public abstract CarDecorator implements Car{
private Car delegate;
public CarDecorator(Car delegate){
this.delegate = delegate
}
public float getSpeed(){return delegate.getSpeed();}
}
如果我想为我的汽车添加水上速度、颜色等,是否允许在我的主界面中添加新功能?
像这样:
interface Car{
public float getSpeed();
public float getAquaticSpeed();
public String getColor();
}
您当然可以添加装饰器的 API,使其成为它包装的对象中接口的超集。 GoF书Decorator章节的第一句话是,
Intent
Attach additional responsibilities to an object dynamically.
本书第 177 页的 UML 结构显示了具有 addedState
和 AddedBehavior()
的具体装饰器,因此通过添加函数来附加责任是完全可以接受的。
关于编辑,否不能修改之前的界面。那会违反单一职责原则,Open/Closed原则,除此之外,它与装饰者模式无关。如果你编辑原来的界面,装饰器是没有用的。