ToB企服应用市场:ToB评测及商务社交产业平台
标题:
布局型模式--组合模式
[打印本页]
作者:
兜兜零元
时间:
4 天前
标题:
布局型模式--组合模式
概念
组合人模式是布局型设计模式的一种,重要是用于解决代码中出现类像树一样举行组合而出现的组合布局的相干操作问题。使其树中的任意一个节点(无论是子节点还是父节点)都可以利用同一套接口举行操作。
利用场景
1、如果希望我们对象组合像树一样,就可以利用组合模式
2、客户端的代码必要以相同的方式处理复杂或者简单的元素(组合对象或者单个对象),可以利用组合模式。
实现方式
1、创建一个可以组成树状布局的核心模子(抽象接口类)。实验将其分解为简单的元素和容器,容器必须可以或许同时包罗简单位素和其他容器。
2、声明组件接口及其一系列的方法,这些方法对简单和复杂元素都故意义。
3、创建一个叶节点类的表示元素。
4、创建一个容器类表示复杂元素,在该类中,创建一个数组成员变量来存储对于子元素的引用,该数组必须可以或许同时保持叶节点和容器,因此请确保将其声明为组合接口类型。
5、末了,容器中定义添加和删除子元素的方法。
类组合布局
示例代码
#include <iostream>
#include "ZuHeMoshi.h"
int main()
{
std::cout << "欢迎东哥来到设计模式的世界!\n";
//创建叶子节点
Leaf leaf1;
leaf1.setTime(2);
Leaf leaf2;
leaf2.setTime(2);
Leaf leaf3;
leaf3.setTime(2);
Leaf leaf4;
leaf4.setTime(2);
AbstractBase* container1 = new Container();
container1->addAbstractBase(&leaf1);
container1->addAbstractBase(&leaf2);
cout << "container1 time : " << container1->allTime() << endl;
AbstractBase* container2 = new Container();
container2->addAbstractBase(&leaf3);
container2->addAbstractBase(&leaf4);
container2->addAbstractBase(container1);
cout << "container2 time : " << container2->allTime() << endl;
}
复制代码
#pragma once
#include <vector>
using namespace std;
class AbstractBase
{
public:
AbstractBase() {}
~AbstractBase() {}
virtual void addAbstractBase(AbstractBase* abstractBase) {};
virtual int allTime() { return 0; };//计算所有时间,假设代码中这是需要计算组合或者单个元素的运行时间的函数
int m_time;
};
class Leaf : public AbstractBase
{
public:
Leaf() {}
~Leaf() {}
int allTime();
void setTime(int time) {
m_time = time;
}
private:
int m_time;
};
class Container : public AbstractBase
{
public:
Container() {}
~Container() {}
void addAbstractBase(AbstractBase* abstractBase);//暂时就写个添加
int allTime();
private:
vector<AbstractBase*> m_vAbstractBase;
};
复制代码
#include "ZuHeMoshi.h"
int Leaf::allTime()
{
return m_time;
}
void Container::addAbstractBase(AbstractBase* abstractBase)
{
m_vAbstractBase.push_back(abstractBase);
}
int Container::allTime()
{
int sun = 0;
for (AbstractBase* base : m_vAbstractBase) {
sun += base->allTime();
}
return sun;
}
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4