gpt4 book ai didi

c# - 如果你不能继承你想要装饰的类,你如何实现装饰者模式?

转载 作者:太空狗 更新时间:2023-10-29 22:55:47 25 4
gpt4 key购买 nike

这更像是一个设计问题......如果出现以下情况,则不能使用装饰设计模式:

1) 该对象被标记为“密封”,这意味着您不能从中扩展。2) 或者您想覆盖一个方法但它不是虚拟的。

那你能做什么?如果您没有源代码(例如第 3 方库),则无法更改类源代码。

最佳答案

装饰器模式不需要继承。最简单的情况是,如果您要装饰的对象实现了一个接口(interface)。然后你的装饰器可以简单地实现相同的接口(interface):

[   IWindow   ]
[ + Draw() ]
---------------
|
+--- [ Window ]
| [ + Draw() ]
|
|
+--- [ DecoratedWindow ]
[ + Draw() ]
-------------------
|
+--- [ BorderDecorator ]
|
+--- [ VerticalScrollbarDecorator ]
|
+--- [ HorizontalScrollbarDecorator ]

现在你可以这样做:

IWindow w = new BorderDecorator(
new HorizontalScrollBarDecorator(
new VerticalScrollBarDecorator(
new Window(80, 24))));

// This is a window with a border and scrollbars, even though
// the original Window class has no idea what those are.
w.Draw();

可能的细节取决于您要装饰的类的确切性质。

关于c# - 如果你不能继承你想要装饰的类,你如何实现装饰者模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2794453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com