当前位置: 首页 > news >正文

网站开发 无形资产seo网站技术培训

网站开发 无形资产,seo网站技术培训,宜选科技就是帮人做网站,工地模板图片大全1、介绍 组合模式(Composite)是一种结构型设计模式,也被称为部分-整体模式。它将复杂对象视为由多个简单对象(称为“组件”)组成的树形结构,这些组件能够共享相同的行为。每个组件都可能包含一个或多个子组…

1、介绍

        组合模式(Composite)是一种结构型设计模式,也被称为部分-整体模式。它将复杂对象视为由多个简单对象(称为“组件”)组成的树形结构,这些组件能够共享相同的行为。每个组件都可能包含一个或多个子组件,而不需要了解子组件的具体类型。

在组合模式中,有三个关键角色:

        (1)组件(Composite):这个抽象类或接口定义了所有组件都具有的公共行为。它通常有一个或多个方法来访问其子组件,并且可以包含一个指向子组件的指针数组。

        (2)具体组件(Leaf):这是没有子组件的组件,它们直接实现了组件接口。这些是组合模式的叶子节点,不包含其他元素。

        (3)复合组件(Composite):这是有子组件的组件,它们除了实现组件接口外,还负责维护子组件的列表,以及调用相应的方法对它们进行操作。

组合模式的优点:

        (1)支持动态扩展和灵活的层次结构。

        (2)降低组件间的耦合度,使得代码更易于理解和维护。

        (3)可以统一处理所有类型的组件,无论是简单的还是复杂的。

2、示例

#include <iostream>
#include <string>
#include <vector>// 抽象的组件类Element 描写全部部件共同拥有的行为
class Element
{
public:Element(const std::string& name): m_name(name){}virtual ~Element(){}virtual void eat() = 0;virtual void add(Element *) = 0;virtual void remove(Element *) = 0;virtual const std::string& getName(){return m_name;}
protected:std::string m_name;
};// 具体组件类,叶子构件 Apple类
class Apple : public Element
{
public:Apple(const std::string& name): Element(name){}virtual ~Apple(){std::cout << "~Apple()" << std::endl;}void eat(){std::cout << "eat fruit type is apple" << std::endl;}void add(Element *pcomt){}void remove(Element *pcomt){}
};// 具体组件类,叶子构件 Banana类
class Banana : public Element
{
public:Banana(const std::string& name): Element(name){}virtual ~Banana(){std::cout << "~Banana()" << std::endl;}void eat(){std::cout << "eat fruit type is banana " << std::endl;}void add(Element *pcomt){}void remove(Element *pcomt){}
};// 具体组件类,叶子构件 Pear类
class Pear : public Element
{
public:Pear(const std::string& name): Element(name){}virtual ~Pear(){std::cout << "~Pear()" << std::endl;}void eat(){std::cout << "eat fruit type is pear" << std::endl;}void add(Element *pcomt){}void remove(Element *pcomt){}
};// 复合组件类 容器构件类 PlateComposite水果盘
class PlateComposite : public Element
{
public:PlateComposite(const std::string& name): Element(name){}virtual ~PlateComposite(){std::cout << "~PlateComposite()" << std::endl;std::vector<Element *>::iterator it = _vecComp.begin();while (it != _vecComp.end()) {if (*it != NULL){std::cout << "----delete " << (*it)->getName() << "----" << std::endl;delete *it;*it = NULL;}_vecComp.erase(it); it = _vecComp.begin();}}void eat(){for(auto iter : _vecComp){iter ->eat();}}void add(Element *pcomt){_vecComp.push_back(pcomt);}void remove(Element *pcomt){for (std::vector<Element *>::iterator it = _vecComp.begin(); it != _vecComp.end(); ++it){if ((*it)->getName() == pcomt->getName()){if (*it != NULL){delete *it;*it = NULL;}_vecComp.erase(it);break;}}}
private:std::vector<Element *> _vecComp;
};int main() 
{ Element *obj1 = new Apple("apple");Element *obj2 = new Banana("banana");Element *plate1 = new PlateComposite("zuhe_1");plate1->add(obj1);plate1->add(obj2);plate1->eat();std::cout << "-----------------------------------------------" << std::endl;Element *obj3 = new Pear("pear");Element *plate2 = new PlateComposite("zuhe_2");plate2->add(obj3);plate2->eat();std::cout << "-----------------------------------------------" << std::endl;plate1->add(plate2);   // 将组合zuhe_2添加到组合zuhe_1中plate1->eat();std::cout << "-----------------------------------------------" << std::endl;plate1->remove(obj1);plate1->eat();std::cout << "-----------------------------------------------" << std::endl;// delete obj1;// delete obj2;if(nullptr != plate1){delete plate1;plate1 = nullptr;}return 0; 
} 

结果:

eat fruit type is apple
eat fruit type is banana 
-----------------------------------------------
eat fruit type is pear
-----------------------------------------------
eat fruit type is apple
eat fruit type is banana 
eat fruit type is pear
-----------------------------------------------
~Apple()
eat fruit type is banana 
eat fruit type is pear
-----------------------------------------------
~PlateComposite()
----delete banana----
~Banana()
----delete zuhe_2----
~PlateComposite()
----delete pear----
~Pear()

http://www.hkea.cn/news/447145/

相关文章:

  • wordpress免费中文企业主题seo权重优化软件
  • 周口网站建设哪家好济南专业seo推广公司
  • 济南网站忧化怎么把抖音关键词做上去
  • 网站建设与维护的题目网站点击软件排名
  • 网站收录服务企业网络的组网方案
  • nba排名灰色词seo排名
  • 如何建自己的个人网站深圳市seo上词多少钱
  • 迎访问中国建设银行网站_永久免费的电销外呼系统
  • 类似AG网站建设网络营销的十大特点
  • 河北盘古做的网站用的什么服务器品牌策划与推广
  • 做网站开发的是不是程序员品牌营销与推广
  • 安卓android软件seo搜索引擎优化方式
  • 网站设计培训课程引流推广平台
  • 做淘宝美工需要知道的网站app软件推广平台
  • 做自己个人网站搜索竞价
  • 兰州网站优化哪家好手机系统流畅神器
  • 广东深圳住房和城乡建设部网站文章优化软件
  • java制作动态网站开发怎么可以让百度快速收录视频
  • 做网站管理好吗阳泉seo
  • 网站排名优化建设seo人人网
  • html5可以做动态网站惠州seo计费
  • 商城网站带宽控制河南网站建设哪家公司好
  • 贵阳网络公司网站建设网络推广公司深圳
  • 企业网站建设公司电话西安seo分析报告怎么写
  • 岳阳市政府网网站seo优化报告
  • 门头沟网站建设外贸谷歌推广
  • 铜陵市住房和城乡建设委员会网站中国最新疫情最新消息
  • 动态网站建设 教程接广告推广的平台
  • 人力资源和社会保障部是干什么的seo最新快速排名
  • 网站标题关键优化网络营销代运营外包公司