【发布时间】:2013-04-12 13:18:40
【问题描述】:
这是面试时被问到的问题。
有一个
Label有一个属性Text
在一个页面中,标签很简单Label,在其他页面中,它可以处理以下任一操作或以下操作的组合
可点击
可调整大小
可拖动你如何设计这个应用OOP设计原理&设计模式的标签组件?
我说过我会创建以下内容:
public class Label
{
public string Text{get;set;}
}
public interface IClickable
{
void Click();
}
public interface IDraggable
{
void Drag();
}
public interface IResizable
{
void Resize();
}
这样如果客户想要 Resizable Label
public class ResizableLabel:Label,IResizable
{
....
}
同样的方式ClickableLable,DraggableLabel
但是,我觉得这是不正确的做法,因为我不想添加那些具体的类。我想避免使用ClickableAndDraggableLabel 或ClickableDraggableResizableLabel。
是否有任何设计模式可以在不添加这些具体类的情况下解决这个问题?
【问题讨论】:
-
"不创建新类"...那么您的示例中的
ResizableLabel不是一个新类吗? -
你问面试官什么是正确的吗?他/她对您的解决方案有何反应?
-
@MatthewWatson,我想重构我的代码。请参阅伊利亚的答案。看起来不错
标签: c# oop design-patterns design-principles