在我们的数据层中,我们需要创建可以从其他“样式”对象继承其值的“样式”对象。
示例方案1:
class Style
{
string Name;
string ParentName;
// Other properties go here.
}
因此,当有这样的样式列表时,带有父名称的样式应该从它的父继承它的样式值。
情景2:
class ConatiningType
{
Style BaseStyle;
Style MouseHoverStyle;
}
在上面的例子中, MouseHoverStyle应该从BaseStyle 继承它的值。
我确信这种情况有一些推荐的设计模式。如果是这样,请指出那些。
答案 0 :(得分:1)
也许Style
本身应该有ParentStyle
:
class Style
{
private readonly Style parentStyle;
private string name;
public string Name
{
get { return name ?? (parentStyle == null ? null : parentStyle.Name); }
set { name = value; }
}
public Style(Style parentStyle)
{
this.parentStyle = parentStyle;
}
}
必须对parentStyle
使用空检查有点烦人,不可否认:(你可以构建一个这样的“默认”版本,当然:
class Style
{
private static readonly Style DefaultStyle = new Style(null) {
Name = "",
...
};
private readonly Style parentStyle;
private string name;
public string Name
{
get { return name ?? parentStyle.Name); }
set { name = value; }
}
public Style(Style parentStyle)
{
this.parentStyle = parentStyle ?? DefaultStyle;
}
}
请注意,DefaultStyle
仍然 为空parentStyle
(因为DefaultStyle
在构造期间为空)但是如果你给它实际的默认值(“”,0等)然后它永远不会试图推迟到它自己不存在的父母身上。