|
1
98
这
前面的代码创建了一个阅读器--
|
|
2
45
|
|
|
3
39
基本上,CommandProcessor接收请求并创建正确的命令,执行命令并创建适当的响应,然后发送响应。当我想添加计时并记录它时,我创建了一个TimerDecoror,它使用现有的CommandProcessor作为其组件。TimerDecorator实现了CommandProcessor接口,但只是添加了计时,然后调用其目标,即真正的CommandProcessor。大致如下:
|
|
|
4
17
Decorator 模式在运行时动态地改变对象的功能。
计算可能包含多种口味的饮料的价格。
输出:
此示例在向饮料中添加多种口味后计算自动售货机中饮料的成本。 在上述示例中: 茶的成本=10,柠檬=3,糖=5。如果你做糖+柠檬+茶,它的价格是18。 咖啡成本=15,柠檬=3,糖=5。如果你做糖+柠檬+咖啡,它的价格是23 通过对两种饮料(茶和咖啡)使用相同的装饰器,减少了子类的数量。在没有Decorator模式的情况下,您应该为不同的组合设置不同的子类。
等等 对于这两种饮料,子类的数量都有所减少。
|
|
|
5
8
这个装饰器很简单,但非常强大。它是实现关注点分离的关键,也是开放封闭原则的重要工具。以订购产品为例:
主要实施:
可能的装饰师可能是:
here 展示了一个装饰器,它在完成订单时保存使用礼品卡创建的订单的联系人:
|
|
|
6
4
|
|
|
7
1
定义: 动态地为对象附加其他职责。装饰器为扩展功能提供了一种灵活的子类化替代方案。 这种模式表示,类必须关闭以进行修改,但打开以进行扩展,可以在不干扰现有功能的情况下添加新功能。当我们想向特定对象而不是整个类添加特殊功能时,这个概念非常有用。在这种模式中,我们使用对象组合而不是继承的概念。
实施
|
|
|
9
0
当你想向一个类/对象添加多个功能,并且想在需要时灵活地添加它们时,Decorator会派上用场。你可以扩展基类并添加你想要的更改,但这样你会想出很多让你大吃一惊的子类。但是使用decorator,您可以进行所需的更改,但仍然有一个简单易懂的流程。 例如,你有一个文件流,在一个用例中,你想加密它,然后压缩它,然后记录它,最后用它做一些花哨的事情。然后在另一个类中,你决定做其他事情。你想转换它,然后加密它,然后得到时间,bluh,bluh。在其他课程中,你还有另一个流程。 如果你想使用继承,你必须创建至少3个子类,如果需要任何其他要求,你必须添加更多的子类,在这种情况下(Stream),你最终会因为微小的变化而得到几十个子类。
在每个用例中,你必须记住需要什么类,并尝试使用它。 但是,想象一下,你使用了组合而不是继承,并且每个Stream进程都有装饰器类,你可以很容易地组合你想要的包装器,并以最少的努力和最大的简单性拥有任何想要的进程。
然后你提出了另一个用例:
|
|
|
10
-1
|