设计模式之组合模式
来源:互联网 发布:阿里云搭建ssr 编辑:程序博客网 时间:2024/05/17 22:05
组合模式(Composite)属于结构模式,如果多个对象的调用是相似的,对象可以单独用,也可以多个一起用,特别是需要将多个对象组合起来用,但是调用的方法要和单独调用是一样的,这种情况下就可以采用组合模式。
下面是组合模式的C++实现,代码可到本人github网页下载:设计模式例子
/* * Example of 'Composite' design pattern. * Copyright (C) 2016 Leo Wang * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */#include <iostream>#include <vector>using namespace std;class CComponent{ public: virtual void Do()=0;};class CConcreteComponentA:public CComponent{ public: void Do() { cout<<"ComponentA Do!"<<endl; };};class CConcreteComponentB:public CComponent{ public: void Do() { cout<<"ComponentB Do!"<<endl; };};class CComposite:public CComponent{ public: vector<CComponent*> v_components; public: void Add(CComponent* p_component) { v_components.push_back(p_component); }; void Do() { for(auto &component:v_components) { component->Do(); } };};int main(){ CComponent* cp_componentA=new CConcreteComponentA(); CComponent* cp_componentB=new CConcreteComponentB(); CComposite* cp_composite=new CComposite(); CComponent* cp_components=cp_composite; cp_composite->Add(cp_componentA); cp_composite->Add(cp_componentB); cp_componentA->Do(); cp_componentB->Do(); cp_composite->Do(); return 1;}
0 0
- 设计模式之组合模式
- 设计模式之组合模式
- 设计模式之组合模式
- 设计模式之--组合模式
- 设计模式之组合模式
- 设计模式之组合模式
- 设计模式之组合模式
- 设计模式之组合模式
- 设计模式之---组合模式
- 设计模式之组合模式
- 设计模式之组合模式
- 设计模式之-------------组合模式
- 设计模式之组合模式
- 设计模式之组合模式
- 设计模式之组合模式
- 设计模式 之 组合模式
- 设计模式之组合模式
- 设计模式之组合模式
- 结构体作为函数参数-malloc操作
- EditText属性
- Head First 设计模式之单件模式(Singleton Pattern)
- Linux—系统启动过程
- Maven+Spring + Mybatis 使用 PageHelper 插件分页
- 设计模式之组合模式
- 模仿与学习MyBatis - 1.2 DataSource与Session
- MyISAM和InnoDB的区别
- 文章标题
- Linux c==网络编程的理论知识
- ashx文件使用的基类的实现
- redis学习笔记(一)redis3.2.5集群安装与测试
- 获取appdelegate对象
- Gradle学习笔记(四)web项目