24合成模式



1合成模式的核心内容是:

略:

2状态模式的作用:略。

3状态模式具体描述

合成模式:合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。

合成模式就是一个处理对象的树结构的模式。合成模式把部分与整体的关系用树结构表示出来。

合成模式使得客户端把一个个单独的成分对象和由他们复合而成的合成对象同等看待。

Mary今天过生日。“我过生日,你要送我一件礼物。”

嗯,好吧,去商店,你自己挑。”

“这件T恤挺漂亮,买,这条裙子好看,买,这个包也不错,买

。”“喂,买了三件了呀,我只答应送一件礼物的哦。

”“什么呀,T恤加裙子加包包,正好配成一套呀,小姐,麻烦你包起来。

”“……”,MM都会用Composite模式了,你会了没有?

4合成模式类图

5.代码:

#include<iostream>

#include
<vector>

#include
<string>

using
namespace
std;

//合成模式:合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。

//合成模式就是一个处理对象的树结构的模式。合成模式把部分与整体的关系用树结构表示出来。

//合成模式使得客户端把一个个单独的成分对象和由他们复合而成的合成对象同等看待。

//

//Mary今天过生日。“我过生日,你要送我一件礼物。”

//嗯,好吧,去商店,你自己挑。”

//“这件T恤挺漂亮,买,这条裙子好看,买,这个包也不错,买

//。”“喂,买了三件了呀,我只答应送一件礼物的哦。

//”“什么呀,T恤加裙子加包包,正好配成一套呀,小姐,麻烦你包起来。

//”“……”,MM都会用Composite模式了,你会了没有?

//组件类

class
Component

{

public:

//组件名称

string
name;

Component(string
name)

{

this->name
= name;

}

//添加组件

virtual
void
add(Component
*) = 0;

//删除组件类

virtual
void
remove(Component
*) = 0;

//显示

virtual
void
display(int)
= 0;

};

class
Leaf :public
Component

{

public:

Leaf(string
name) :Component(name)

{}

void
add(Component
*c)

{

cout <<
"leaf cannotadd"<<
endl;

}

void
remove(Component
*c)

{

cout <<
"leaf cannotremove"<<
endl;

}

void
display(int
depth)

{

string
str(depth,
‘-‘);

str +=
name;

cout <<
str <<
endl;

}

};

class
Composite :public
Component

{

private:

vector<Component*>
component;

public:

Composite(string
name) :Component(name)

{}

void
add(Component
*c)

{

component.push_back(c);

}

void
remove(Component
*c)

{

vector<Component*>::iterator
iter =
component.begin();

while (iter
!= component.end())

{

if (*iter
== c)

{

component.erase(iter);

}

iter++;

}

}

void
display(int
depth)

{

string
str(depth,
‘-‘);

str +=
name;

cout <<
str <<
endl;

vector<Component*>::iterator
iter =
component.begin();

while (iter
!= component.end())

{

(*iter)->display(depth
+ 2);

iter++;

}

}

};

//显示了树状结构

int
main()

{

Component *p
= new
Composite("小李");

p->add(new
Leaf("小王"));

p->add(new
Leaf("小强"));

Component *sub
= new
Composite("小虎");

sub->add(new
Leaf("小王"));

sub->add(new
Leaf("小明"));

sub->add(new
Leaf("小柳"));

p->add(sub);

p->display(0);

cout <<
"*******" <<
endl;

sub->display(2);

cin.get();

return 0;

}

运行结果如下:

时间: 2024-12-13 08:19:25

24合成模式的相关文章

合成模式 composite

典型例子: 管道过滤器. 下面是一个例子,不贴合实际,但是用到了 合成模式. 1 public interface SalaryComputer { 2 public int computer(int m, int n); 3 } 1 public class Add implements SalaryComputer { 2 @Override 3 public int computer(int m, int n) { 4 System.out.println(m + "+" + n

Java设计模式(六)合成模式 享元模式

(十一)合成模式 Composite 合成模式是一组对象的组合,这些对象可以是容器对象,也可以是单对象.组对象允许包含单对象,也可以包含其他组对象,要为组合对象和单对象定义共同的行为.合成模式的意义是 保证客户端调用单对象与组合对象的一致性. class TreeNode{ private String name; private TreeNode parent; private Vector<TreeNode> children = new Vector<TreeNode>();

合成模式

AWT中就有合成模式的例子,如下图所示: 可以看出Button和Checkbox为叶子节点,Container为树枝节点,而且Container可以包含其他的Component对象,如Button等. Container中有操作聚集的方法,而Component则没有这样的方法,也就是说AWT中使用的是安全式的合成模式,这是使用合成模式的两种方法之一. 下面情形应该考虑使用合成模式: 1.需要描述对象整体和部分的等级关系. 2.客户端会忽略叶子节点和树枝节点的区别,平等地使用叶子节点和树枝节点.

《JAVA与模式》之合成模式

在阎宏博士的<JAVA与模式>一书中开头是这样描述合成(Composite)模式的: 合成模式属于对象的结构模式,有时又叫做"部分--整体"模式.合成模式将对象组织到树结构中,可以用来描述整体与部分的关系.合成模式可以使客户端将单纯元素与复合元素同等看待. 合成模式 合成模式把部分和整体的关系用树结构表示出来.合成模式使得客户端把一个个单独的成分对象和由它们复合而成的合成对象同等看待. 比如,一个文件系统就是一个典型的合成模式系统.下图是常见的计算机XP文件系统的一部分.

合成模式(Composite)-结构型

原理 合成模式属于对象的结构模式,有时又叫做“部分——整体”模式.合成模式将对象组织到树结构中,可以用来描述整体与部分的关系.合成模式可以使客户端将单纯元素与复合元素同等看待. 有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦. 合成模式让你可以优化处理递归或分级数据结构.有许多关于分级数据结构的例子,使得合成模式非常有用武之地.关于分级数据结构的一个普遍性的例子是你每次使

设计模式_Composite_合成模式

形象例子: Mary今天过生日.“我过生日,你要送我一件礼物.”“嗯,好吧,去 商店,你自己挑.”“这件T恤挺漂亮,买,这条裙子好看,买,这个包也不错,买.”“喂,买了三件了呀,我只答应送一件礼物的哦.”“什么呀,T恤加裙子加包包,正好配成一套呀,小姐,麻烦你包起来.”“……”,MM都会用Composite模式了,你会了没有? 合成模式: 合成模式将对象组织到树结构中,可以用来描述整体与部分的关系.合成模式就是一个处理对象的树结构的模式.合成模式把部分与整体的关系用树结构表示出来.合成模式使得客

《Java设计模式》之合成模式

合成模式 合成模式把部分和整体关系用树结构表示,是属于对象的结构模式.合成模式要对组合的对象进行管理,所以在一定位置给予对象的相关管理方法,如:add(),remove()等.合成模式中对象的管理有两种方案. 1.安全方式:此方式只允许树枝构件有对象的管理方法. 2.透明方式:此方式只允许树枝和树叶都有对象的管理方法,但树叶对象中的管理方法无实际意义. 一.UML示意图 二.组成部分 抽象构件:抽象组合对象的公共行为接口 树叶构件:树叶对象,没有下级子对象 树枝构件:树枝对象,树枝对象可以包含一

JAVA设计模式之合成模式

在阎宏博士的<JAVA与模式>一书中开头是这样描述合成(Composite)模式的: 合成模式属于对象的结构模式,有时又叫做“部分——整体”模式.合成模式将对象组织到树结构中,可以用来描述整体与部分的关系.合成模式可以使客户端将单纯元素与复合元素同等看待. 合成模式 合成模式把部分和整体的关系用树结构表示出来.合成模式使得客户端把一个个单独的成分对象和由它们复合而成的合成对象同等看待. 比如,一个文件系统就是一个典型的合成模式系统.下图是常见的计算机XP文件系统的一部分. 从上图可以看出,文件

设计模式(十)---合成模式

1.简介 合成模式属于对象的结构模式,有时又叫做"部分--整体"模式.合成模式将对象组织到树结构中,可以用来描述整体与部分的关系.合成模式可以使客户端将单纯元素与复合元素同等看待. 2.合成模式 合成模式把部分和整体的关系用树结构表示出来.合成模式使得客户端把一个个单独的成分对象和由它们复合而成的合成对象同等看待. 比如,一个文件系统就是一个典型的合成模式系统.下图是常见的计算机XP文件系统的一部分. 从上图可以看出,文件系统是一个树结构,树上长有节点.树的节点有两种,一种是树枝节点,