【php设计模式】组合模式
定义:
是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。
应用场景:
部分、整体场景,如树形菜单,文件、文件夹的管理
通俗解释:
组合模式,就是在一个对象中包含其他对象,这些被包含的对象可能是终点对象(不再包含别的对象),也有可能是非终点对象(其内部还包含其他对象,或叫组对象),我们将对象称为节点,即一个根节点包含许多子节点,这些子节点有的不再包含子节点,而有的仍然包含子节点,以此类推。很明显,这是树形结构,终结点叫叶子节点,非终节点(组节点)叫树枝节点,第一个节点叫根节点。同时也类似于文件目录的结构形式:文件可称之为终节点,目录可称之为非终节点(组节点)。
实现如图所示的树形结构
interface Node{
public function add(Node $node);
} class Branch implements Node{
static $i = 0;
public $name;
public $node_list;
public function __construct($name){
$this->name = $name;
} public function add(Node $node){
$this->node_list[] = $node;
} } class Leaf implements Node{
public $name;
public function __construct($name){
$this->name = $name;
} public function add(Node $node){
throw new Exception("Leaf don't add sub nodes");
}
} $branch = new Branch("主干"); $branch_left = new Branch("左树枝");
$branch_right = new Branch("右树枝"); $leaf1 = new Leaf("左第一片树叶");
$leaf2 = new Leaf("左第二片树叶"); $branch->add($branch_left);
$branch->add($branch_right); $branch_left->add($leaf1);
$branch_left->add($leaf2); print_r($branch);
输出:
Branch Object
(
[name] => 主干
[node_list] => Array
(
[0] => Branch Object
(
[name] => 左树枝
[node_list] => Array
(
[0] => Leaf Object
(
[name] => 左第一片树叶
) [1] => Leaf Object
(
[name] => 左第二片树叶
) ) ) [1] => Branch Object
(
[name] => 右树枝
[node_list] =>
) ) )
【php设计模式】组合模式的更多相关文章
- 16. 星际争霸之php设计模式--组合模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- Java设计模式——组合模式
JAVA 设计模式 组合模式 用途 组合模式 (Component) 将对象组合成树形结构以表示“部分-整体”的层次结构.组合模式使得用户对单个对象和组合对象的使用具有唯一性. 组合模式是一种结构型模 ...
- 【设计模式】Java设计模式 - 组合模式
Java设计模式 - 组合模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一起记录分享自己 ...
- c#设计模式-组合模式
在软件开发过程中,我们经常会遇到处理简单对象和复合对象的情况,例如对操作系统中目录的处理就是这样的一个例子,因为目录可以包括单独的文件,也可以包括文件夹,文件夹又是由文件组成的,由于简单对象和复合对象 ...
- [Head First设计模式]生活中学设计模式——组合模式
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...
- JAVA 设计模式 组合模式
用途 组合模式 (Component) 将对象组合成树形结构以表示“部分-整体”的层次结构.组合模式使得用户对单个对象和组合对象的使用具有唯一性. 组合模式是一种结构型模式. 结构
- javascript设计模式-组合模式
组合模式所要解决的问题: 可以使用简单的对象组合成复杂的对象,而这个复杂对象有可以组合成更大的对象.可以把简单这些对象定义成类,然后定义一些容器类来存储这些简单对象. 客户端代码必须区别对象简单对象和 ...
- 设计模式组合模式(Composite)精华
23种子GOF设计模式一般分为三类:创建模式.结构模型.行为模式. 创建模式抽象的实例,他们帮助如何创建一个系统独立.这是一个这些对象和陈述的组合. 创建使用继承类的类架构更改实例.的对象类型模型的建 ...
- 设计模式 -- 组合模式 (Composite Pattern)
定义: 对象组合成部分整体结构,单个对象和组合对象具有一致性. 看了下大概结构就是集团总公司和子公司那种层级结构. 角色介绍: Component :抽象根节点:其实相当去总公司,抽象子类共有的方法: ...
- javascript设计模式——组合模式
前面的话 在程序设计中,有一些和“事物是由相似的子事物构成”类似的思想.组合模式就是用小的子对象来构建更大的对象,而这些小的子对象本身也许是由更小的“孙对象”构成的.本文将详细介绍组合模式 宏命令 宏 ...
随机推荐
- 免费下载 SetupVPN CRX 3.7.0 for Chrome OR QQ浏览器
免费下载 SetupVPN CRX 3.7.0 for Chrome OR QQ浏览器 Lifetime Free VPN(微劈嗯) 下载setupvpn 3.7.0的crx文件, 打开chrome的 ...
- C++ STL partial_sort
#include <iostream>#include <deque>#include <algorithm>#include <vector> usi ...
- Centos D-Bus connection: Operation not permitted
解决办法: 首先要先在后台启动一个 CentOS7 容器(注意不要少参数): docker run -d -e "container=docker" --privileged=tr ...
- double,float,BigDecimal类型数值的操作
float四舍五入保留两位小数 /** * float四舍五入保留两位小数 * */ public static float formatDecimal(float n) { return (Math ...
- Swagger下载的zip文件无法打开,而且大小比直接下载的要大
以前写的一个rest提供的是浏览器下载zip包的功能,前端界面调用rest可以正常地下载. 今天使用Swagger来调试下载功能时,发现下载的zip包打不开,而且大小也比直接在浏览器中输入rest地址 ...
- 请求路径@PathVariable注释中有点.英文句号的问题(忽略英文句号后面的后缀)
前端页面请求地址 <video id=example-video width=960 height=540 class="video-js vjs-default-skin" ...
- windows下gitee WEBHOOK的坑...
折腾到凌晨五点,依然没有实现 windows下 分支 push之后服务器自动部署 主要是因为GIT的helper的配置上的问题.最后果断放弃了,最后祭出大招,用 WINDONS命令行自动循环..60 ...
- OnPreInit,OnInit ,OnInitComplete ,OnPreLoad ,Page_Load等执行顺序
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- orac l e数据库第一章
数据库两种权限: 1.系统权限 2.对象权限 数据库端口号: SQL SERVER 1433 MySql 3306 ...
- Ubuntu14.04中stopping log initial device creation错误或自动挂载错误失败(导致系统无法自动启动)
出现问题的原因: 图一 出现问题的界面: 图二 按esc,无作用. 图三 按esc,按i,依然无作用. 图四 解决方法: (1)按esc,i无用, 在图2按s成功到登陆界面. (2)桌面修改为dis ...