网站加入谷歌地图导航,推广普通话手抄报模板可打印,wordpress怎么加关键词和描述,网页开发环境一般写什么组合模式定义
C组合模式#xff08;Composite Pattern#xff09;是一种结构型设计模式#xff0c;他允许将对象组合成树形结构来表示“部分-整体”的层次结构#xff1b;在组合模式中有两种基本类型的对象#xff1a;叶子对象和组合对象#xff0c;叶子对象时没有子对象…组合模式定义
C组合模式Composite Pattern是一种结构型设计模式他允许将对象组合成树形结构来表示“部分-整体”的层次结构在组合模式中有两种基本类型的对象叶子对象和组合对象叶子对象时没有子对象的而组合对象则是拥有子对象的。叶子对象和组合对象都实现了相同的接口以便可以用相同的方式处理他们。
简单的C组合模式实例
#include iostream
#includevector//抽象基类定义组合对象和叶子对象的公共接口
class Component
{
public://纯虚函数需要子类实现,virtual void operation() 0;
};//叶子对象无子对象实现Component接口
class Leaf :public Component
{
public:void operation() override{std::cout Lead operation std::endl;}
};
//组合对象拥有子对象实现Component接口
class Composite :public Component
{
public://添加子对象到子对象列表中void add(Component* component){children.push_back(component);}void operation() override{std::cout Composite operation std::endl;for (auto child : children){child-operation();}}
private:std::vectorComponent*children; //子对象列表
};
int main()
{Leaf leaf;Composite composite;composite.add(leaf);composite.add(leaf);composite.add(leaf);composite.operation();return 0;}文件系统来演示组合模式
我们以一个文件系统为例使用组合模式来表示文件系统中的目录和文件的关系
#include iostream
#includestring
#includevector//抽象基类定义了组合对象和叶子对象的公共接口
class FileSystemComponent
{
public:virtual void showInfo() 0;virtual ~FileSystemComponent() {};
};
//叶子对象:文件
class File :public FileSystemComponent
{
public:File(const std::string name) :m_Name(name) {}void showInfo() override{std::cout File: m_Name std::endl;}
private:std::string m_Name;
};//组合对象:目录
class Directory :public FileSystemComponent
{
public:Directory(const std::string name) :m_Name(name) {}void add(FileSystemComponent* com){children.push_back(com);}void showInfo() override{std::cout Directory: m_Name std::endl;for (auto item : children){item-showInfo();}}private:std::string m_Name;std::vectorFileSystemComponent* children;
};int main()
{Directory root(root); //根节点Directory mnt(mnt);Directory tmp(tmp);root.add(mnt);root.add(tmp);File ext(ext);File nfs(nfs);mnt.add(ext);tmp.add(nfs);root.showInfo();return 0;}在这里插入图片描述