- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章C++设计模式之装饰模式(Decorator)由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
装饰模式是一种经典的类功能扩展模式,其精髓在装饰类使用继承加聚合的方式获得接口和要实现对象,然后通过自己实现扩展接口 。
作用 装饰模式通过装饰类动态地将责任附加到对象上,若要扩展功能,无需通过继承增加子类就能扩展对象的新功能,提供了比继承更有弹性的替代方案,避免了子类数量膨胀带来的系统臃肿.
类视图 。
代码实现 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
class
Component
{
public
:
Component(){}
virtual
~Component(){}
virtual
void
operation() = 0;
};
class
ConcreteComponentA :
public
Component
{
public
:
ConcreteComponentA(){}
~ConcreteComponentA(){}
void
operation()
{
fprintf
(stderr,
"ConcreteComponentA's operation!\n"
);
}
};
class
ConcreteComponentB :
public
Component
{
public
:
ConcreteComponentB(){}
~ConcreteComponentB(){}
void
operation()
{
fprintf
(stderr,
"ConcreteComponentB's operation!\n"
);
}
};
class
Decorator :
public
Component
{
public
:
Decorator() :mComponent(NULL){}
virtual
~Decorator(){}
virtual
void
operation()
{
if
(mComponent)
mComponent->operation();
}
virtual
void
setComponent(Component* pComponent)
{
mComponent = pComponent;
}
protected
:
Component* mComponent;
};
class
ConcreteDecoratorE :
public
Decorator
{
public
:
ConcreteDecoratorE ();
virtual
~ConcreteDecoratorE ();
virtual
void
addBehavior()
{
mComponent->operation();
fprintf
(stderr,
"ConcreteDecoratorE's addBehavior!\n"
);
}
};
class
ConcreteDecoratorF :
public
Decorator
{
public
:
ConcreteDecoratorF ();
virtual
~ConcreteDecoratorF ();
virtual
void
addBehavior()
{
operation();
fprintf
(stderr,
"ConcreteDecoratorF's addBehavior!\n"
);
}
};
int
main()
{
ConcreteComponentB *pComponent =
new
ConcreteComponentB();
ConcreteDecoratorF decorator;
decorator.setComponent(pComponent);
decorator.addBehavior();
}
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:http://www.cnblogs.com/chencarl/p/8649394.html 。
最后此篇关于C++设计模式之装饰模式(Decorator)的文章就讲到这里了,如果你想了解更多关于C++设计模式之装饰模式(Decorator)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 2 年前。 Improve this ques
运行 jscodeshift -t ./react-codemod/transforms/React-PropTypes-to-prop-types.js ./src 时出现以下错误 Transfor
尝试将带有 vuex-module-decorators 的存储模块加载到初始化程序中时出现此错误: vuex.esm.js?2f62:261 Uncaught TypeError: Cannot r
我在 JBoss AS 7.1.0.Final 上运行的 ear 应用程序由两个 jar 组成: lib/one.jar lib/two.jar 两个 jar 都是 CDI bean 文件。 two.
我想使用两种类型的装饰器: 一) @new def foo(): print("foo") b) @new(arg1, arg2, arg3, ...) def bar(): prin
所以我在这里试图实现的是,我不希望任何超链接带有下划线,同时我希望某些元素被删除。 他们两个单独工作都很好,但我不能同时工作。 代码: a:link { text-decoration:
Env: Wildfly 9.0.1 Weld 2.2.14 我目前正在研究在合理的情况下在我们的遗留代码库中使用 CDI @Decorator 的可能性。 查看规范和 java ee 7
在 JavaScript 函数中,接收函数、修改行为并返回该函数的似乎是装饰器。例如,这将是一个装饰器函数: function doubleDec (func){ return functio
我正在升级到 Babel 7,虽然应用程序正在加载,但我的测试出现了问题。他们以前很好。我从涉及装饰组件的每个测试中都收到此错误。 FAIL src/app/components/pages/Ho
在运行 pip install InstagramAPI 时,我有 2 个错误,我还没有设法修复。 我遇到的第一个错误是 "networkx 2.1 has requirement decorator
我试图做一个装饰器来包装协程或函数。 我尝试的第一件事是在包装器中编写一个简单的重复代码: def duration(func): @functools.wraps(func) def
我有一个非常简单的函数,定义为 def test(x): return x 我想用装饰器包装它,它返回一个需要另一个 kwargs 参数的函数。 @simple_dec def test(x):
我想将我正在使用的 API 分为两个部分:“基本”和“轻松”。这个想法是,'cushy' 部分中的所有方法调用都可以用 'bare-bones' 部分中的方法来表示,也就是说,它们将只作为快速和肮脏的
为什么这不会从 this page 上的 facebook 和刺客行业链接中删除下划线| . .module_wpproad { text-decoration:none; border:none;
为什么这不会从 this page 上的 facebook 和刺客行业链接中删除下划线| . .module_wpproad { text-decoration:none; border:none;
注意:我问的不是常见的 python 装饰器,而是装饰器设计模式。 我想写一个装饰器来修改具体组件调用的函数,下面的代码示例说明了我的问题: In [2]: class Animal: ...:
我有一个类主要提供用于连接存储在字典中的数据的属性。每个属性(通常)负责字典中的一个键,但字典中可能还有其他键,这些键不受属性管理。 编辑 3:澄清一下,因为评论中有些困惑: I have an ar
我在 Django View 上有这个错误: TypeError at /web/host/1/ decorator() got an unexpected keyword argument 'hos
出于调试目的,我想打印出与在 python 方法中执行的每一行有关的内容。 例如,如果行中有一些赋值,我想打印为该变量赋值的值,如果有函数调用,我想打印出函数返回的值,等等。 因此,例如,如果我要使用
装饰模式是一种经典的类功能扩展模式,其精髓在装饰类使用继承加聚合的方式获得接口和要实现对象,然后通过自己实现扩展接口 作用 装饰模式通过装饰类动态地将责任附加到对象上,若要扩展功能,无需通过继承增
我是一名优秀的程序员,十分优秀!