我需要向对象添加额外的数据-但我不需要添加功能。因此,下面的示例是经典的GOF Decorator模式吗?
class ClassIWantToDecorate
{
public string GetData() { return "data"; }
}
class Decorator
{
private ClassIWantToDecorate _classIWantToDecInstance = null;
private string _additionalData;
public Decorator(ClassIWantToDecorate classIWantToDec, string additionalData)
{
_classIWantToDecInstance = classIWantToDec;
_additionalData = additionalData;
}
public string DataINeed()
{
return _classIWantToDecInstance.GetData();
}
public string AdditionalDataINeed()
{
return _additionalData;
}
}发布于 2012-12-25 07:22:28
不是的。我会说这只是composition。
装饰器应该是这样的:
interface DataINeedProvider {
string DataINeed();
}
class LoggingDecorator implements DataINeedProvider
{
private DataINeedProvider _classIWantToDecInstance = null;
private Logger logger = new Logger();
public LoggingDecorator(DataINeedProvider classIWantToDec) {
_classIWantToDecInstance = classIWantToDec;
}
public string DataINeed()
{
logger.log("DataINeed has been called");
return _classIWantToDecInstance.DataINeed();
}
}PS:如果这不是有效的C#语法,很抱歉。我是一名Java开发人员。
发布于 2012-12-25 07:23:14
您的实现的问题是您的装饰器接口与装饰器对象的接口不兼容。
有效的装饰器解决方案应该是:
interface ClassIWantToDecorateInterface {
public string GetData();
}
class ClassIWantToDecorate implements ClassIWantToDecorateInterface {
public string GetData() { return "data"; }
}
class Decorator implements ClassIWantToDecorateInterface {
private ClassIWantToDecorateInterface _classIWantToDecInstance = null;
private string _additionalData;
public Decorator(ClassIWantToDecorateInterface classIWantToDec, string additionalData)
{
_classIWantToDecInstance = classIWantToDec;
_additionalData = additionalData;
}
public string GetData() {
return _classIWantToDecInstance.GetData();
}
public string AdditionalDataINeed() {
return _additionalData;
}
}(我使用Java语法是因为我不确定您使用的是C#还是Java。根据语法,它可以是两者都是)
https://stackoverflow.com/questions/14026380
复制相似问题