• 设计模式:composite模式


    目的:使容器和内容具备一致性

    实现:将对象组合成树形结构以表示“部分-整体”的层次结构

    实例:文件夹中可以包含文件夹也可以包含文件

    例子:

    class Item //接口定义
    {
    public:
    	virtual int getSize() = 0;
    	virtual string getName() = 0;
    	virtual void add(Item *item) = 0;
    	virtual void Print();
    };
    
    void Item::Print()
    {
    	cout << "name = " << getName() << "    " << "size = " << getSize() << endl;
    }
    
    class File: public Item //内容定义
    {
    	string name;
    	int size;
    public:
    	File(string name, int size)
    	{
    		this->name = name;
    		this->size = size;
    	}
    	
    	int getSize()
    	{
    		return size;
    	}
    	
    	string getName()
    	{
    		return name;
    	}
    	
    	void add(Item *item)
    	{
    		throw 1;
    	}
    };
    
    class Directory: public Item //容器定义
    {
    	string name;
    	vector<Item*> v;
    public:
    	Directory(string name)
    	{
    		this->name = name;
    	}
    	
    	int getSize()
    	{
    		int ret = 0;
    		
    		for(int i=0; i<v.size(); i++)
    		{
    			ret += v[i]->getSize();
    		}
    		
    		return ret;
    	}
    	
    	string getName()
    	{
    		return name;
    	}
    	
    	void add(Item *item)
    	{
    		v.push_back(item);
    	}
    };
    
    int main() 
    {
    	Directory* d0 = new Directory(string("0"));
    	
    	File* f1 = new File("11", 10);
    	Directory* d1 = new Directory(string("11"));
    	d0->add(f1);
    	d0->add(d1);
    	
    	File* f2 = new File("21", 20);
    	File* f3 = new File("22", 30);
    	d1->add(f2);
    	d1->add(f3);
    	
    	d0->Print();
    	
    	return 0;
    }
    
  • 相关阅读:
    操作系统概述总结
    string类的用法总结
    stack的简单用法总结
    递归用法总结
    C语言中常见的图形打印总结
    C++中list的用法总结
    STL中find和sort的用法总结
    unity Physics/Physics2DProjectSettings中LayerCollisionMatrix的存储方式
    UnityEvent<T> 系列化
    十字相乘法
  • 原文地址:https://www.cnblogs.com/chusiyong/p/11433397.html
Copyright © 2020-2023  润新知