Nei*_*ell 0 c# design-patterns decorator composition
我之前对装饰器模式的理解是你继承Window
了WindowDecorator
,然后在重写的方法中,在调用Window
所述方法的实现之前做了一些额外的工作.类似于以下内容:
public class Window
{
public virtual void Open()
{
// Open the window
}
}
public class LockableWindow : Window // Decorator
{
public virtual void Open()
{
// Unlock the window
base.Open();
}
}
Run Code Online (Sandbox Code Playgroud)
然而,这基本上是对装饰进行硬编码,那么如何使用合成而不是继承来重构呢?
对不起,我的C#有点(好的,非常)生锈,所以可能会有一些语法错误,但基本的想法是正确的.
public interface IWindow
{
void Open();
}
public class Window : IWindow
{
public virtual void Open()
{
// Open the window
}
}
public class LockableWindow : IWindow
{
private IWindow _wrappedWindow;
public LockableWindow(IWindow wrappedWindow)
{
_wrappedWindow = wrappedWindow;
}
public virtual void Open()
{
// TODO Unlock window if necessary
_wrappedWindow.open();
}
}
Run Code Online (Sandbox Code Playgroud)
需要注意的关键是新IWindow
界面; 这就是允许你继续使用多态的原因.