设计模式复习-组合模式
生活随笔
收集整理的這篇文章主要介紹了
设计模式复习-组合模式
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
#pragma once
#include "stdafx.h"
#include<set>
#include<string>
#include<iostream>
using namespace std;/*
設(shè)計(jì)模式-組合模式(Composite)[用類建一棵樹]將對(duì)象組合成樹形結(jié)構(gòu)以表示 部分-整體 的層次結(jié)構(gòu)。組合模式使得用戶對(duì)
單個(gè)對(duì)象和組合對(duì)象的使用具有一致性。
*/class CComponent {//所有節(jié)點(diǎn)統(tǒng)一接口
protected:string m_strName;
public:CComponent(const string &strName) {m_strName = strName;}virtual void Add(CComponent * const pc) = 0;virtual void Remove(CComponent * const pc) = 0;virtual void Display(const int & nDepth) = 0;
};class CLeaf : public CComponent {
public:CLeaf(const string &strName) : CComponent(strName) {}void Add(CComponent *const pc) {cout << "Cannot add to a leaf" << endl;}void Remove(CComponent *const pc) {cout << "Cannot remove from a leaf" << endl;}void Display(const int &nDepth) {cout << "-" << nDepth << ":" << m_strName << endl;}
};class CCpmposite : public CComponent {
private:set<CComponent*>m_cChildren;
public:CCpmposite(const string &strName) : CComponent(strName) {m_cChildren.clear();}void Add(CComponent * const pc) {m_cChildren.insert(pc);}void Remove(CComponent * const pc) {m_cChildren.erase(pc);delete pc;}void Display(const int &nDepth) {cout << "-" << nDepth << ":" << m_strName << endl;for each(auto i in m_cChildren) {i->Display(nDepth + 1);}}~CCpmposite() {for each(auto i in m_cChildren) {delete i;}}
};int main() {CCpmposite *pRoot = new CCpmposite("root");pRoot->Add(new CLeaf("Lead A"));pRoot->Add(new CLeaf("Lead B"));CCpmposite *pComp = new CCpmposite("Composite X");pComp->Add(new CLeaf("Lead A"));pComp->Add(new CLeaf("Lead B"));pRoot->Add(pComp);pRoot->Display(1);delete pRoot;getchar();return 0;
}
總結(jié)
以上是生活随笔為你收集整理的设计模式复习-组合模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式复习-迭代器模式
- 下一篇: 设计模式复习-单例模式