广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP中的组合模式用法实例
  • 669
分享到

PHP中的组合模式用法实例

2023-06-20 15:06:25 669人浏览 安东尼
摘要

这篇文章主要讲解了“PHP中的组合模式用法实例”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php中的组合模式用法实例”吧!互联网公司流行扁平化管理,也就是管理层级尽量少于或者不超过三层,作

这篇文章主要讲解了“PHP中的组合模式用法实例”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php中的组合模式用法实例”吧!

互联网公司流行扁平化管理,也就是管理层级尽量少于或者不超过三层,作为一个底层的码农,你的CEO和你的职级也就相差3层以内。但是很多传统企业,则会有非常深的层级关系,从数据结构看,这种按职能进行分组的组织架构非常像一颗树。而我们今天介绍的组合模式的作用就和这个企业组织架构层级的模式非常类似。

Gof类图及解释

GoF定义:将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性

GoF类图

PHP中的组合模式用法实例

代码实现

abstract class Component{    protected $name;    public function __construct($name){        $this->name = $name;    }        abstract public function Operation(int $depth);    abstract public function Add(Component $component);    abstract public function Remove(Component $component);}

抽象出来的组合节点声明,在适当情况下实现所有类的公共接口的缺省行为,是所有子节点的父类。

class Composite extends Component{    private $componentList;    public function Operation($depth)    {        echo str_repeat('-', $depth) . $this->name . PHP_EOL;        foreach ($this->componentList as $component) {            $component->Operation($depth + 2);        }    }    public function Add(Component $component)    {        $this->componentList[] = $component;    }    public function Remove(Component $component)    {        $position = 0;        foreach ($this->componentList as $child) {            ++$position;            if ($child == $component) {                array_splice($this->componentList, ($position), 1);            }        }    }    public function GetChild(int $i)    {        return $this->componentList[$i];    }}

具体的节点实现类,保存下级节点的引用,定义实际的节点行为。

class Leaf extends Component{    public function Add(Component $c)    {        echo 'Cannot add to a leaf' . PHP_EOL;    }    public function Remove(Component $c)    {        echo 'Cannot remove from a leaf' . PHP_EOL;    }    public function Operation(int $depth)    {        echo str_repeat('-', $depth) . $this->name . PHP_EOL;    }}

叶子节点,没有子节点的最终节点。

  • 从来代码来看,完全就是一颗树的实现

  • 所有的子节点和叶子节点都可以处理数据,但叶子节点为终点

  • 你希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,就应该考虑使用组合模式

  • 用户不用关心到底是处理一个叶节点还是处理一个组合组件 ,也就用不着为定义组合而写一些选择判断语句了

  • 组合模式可以让客户一致性地使用组合结构和单个对象

接着文章最开头的例子来说,在我们的组织架构中,一项任务下达到最底的人员时,会经历多个层级。我还是比较喜欢传统一起的企业管理方式。通常是一名总监对应多个主管,一名主管对应多位经理,一位经理对应多位组长,一名组长对应多名员工。当一个通知下发时,每一层级的工作人员都要做出回应,并将通知继续下发到下属员工那里,同时从下属哪里获得反馈。这样,我们就不知不觉地在实践中完成了一次组合模式的应用。突然感觉自己棒棒哒,感觉人生已经到达了巅峰!!

完整代码:https://GitHub.com/zhangyue0503/designpatterns-php/blob/master/14.composite/source/composite.php

实例

短信短信,这个功能我们可以是翻来覆去的用了。这次也不例外。这一回我们的网站后台的功能是要针对不同分站和不同来源的用户进行短信的发送。在这里,我们依然只关注短信发送这件事儿,我们希望给你不同渠道角色但包含统一行为的用户,你来进行发送就行了,这样的功能似乎并不难吧!

短信发送类图

PHP中的组合模式用法实例

完整源码Https://github.com/zhangyue0503/designpatterns-php/blob/master/14.composite/source/composite-msg.php

<?phpabstract class Role{    protected $userRoleList;    protected $name;    public function __construct(String $name)    {        $this->name = $name;    }    abstract public function Add(Role $role);    abstract public function Remove(Role $role);    abstract public function SendMessage();}class RoleManger extends Role{    public function Add(Role $role)    {        $this->userRoleList[] = $role;    }    public function Remove(Role $role)    {        $position = 0;        foreach ($this->userRoleList as $n) {            ++$position;            if ($n == $role) {                array_splice($this->userRoleList, ($position), 1);            }        }    }    public function SendMessage()    {        echo "开始发送用户角色:" . $this->name . '下的所有用户短信', PHP_EOL;        foreach ($this->userRoleList as $role) {            $role->SendMessage();        }    }}class Team extends Role{    public function Add(Role $role)    {        echo "小组用户不能添加下级了!", PHP_EOL;    }    public function Remove(Role $role)    {        echo "小组用户没有下级可以删除!", PHP_EOL;    }    public function SendMessage()    {        echo "小组用户角色:" . $this->name . '的短信已发送!', PHP_EOL;    }}// root用户$root = new RoleManger('网站用户');$root->add(new Team('主站用户'));$root->SendMessage();// 社交版块$root2 = new RoleManger('社交版块');$managerA = new RoleManger('论坛用户');$managerA->add(new Team('北京论坛用户'));$managerA->add(new Team('上海论坛用户'));$managerB = new RoleManger('sns用户');$managerB->add(new Team('北京sns用户'));$managerB->add(new Team('上海sns用户'));$root2->add($managerA);$root2->add($managerB);$root2->SendMessage();

说明

  • 当我要发送论坛版块的用户时,我可以自由地添加各地方站的叶子节点来控制发送对象

  • 你可以把整个$root2的发送看作是一个整体,不同的版块和地区看成是部分

  • 这个组合可以一直向下延伸,直到深度的叶子节点结束,这个度当然是由自己来把控,很清晰明了

感谢各位的阅读,以上就是“PHP中的组合模式用法实例”的内容了,经过本文的学习后,相信大家对PHP中的组合模式用法实例这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: PHP中的组合模式用法实例

本文链接: https://www.lsjlt.com/news/298165.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PHP中的组合模式用法实例
    这篇文章主要讲解了“PHP中的组合模式用法实例”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP中的组合模式用法实例”吧!互联网公司流行扁平化管理,也就是管理层级尽量少于或者不超过三层,作...
    99+
    2023-06-20
  • php设计模式-组合模式的运用
    介绍 PHP的组合模式是一种设计模式,用于将对象组合成树形结构以表示“部分-整体”的层次结构。该模式允许客户端统一处理单个对象和组合对象,使得客户端在处理对象时不需要知道对象是否为单个对象还是组合对...
    99+
    2023-08-31
    组合模式 php 设计模式
  • Java设计模式之组合模式实例分析
    这篇文章主要介绍“Java设计模式之组合模式实例分析”,在日常操作中,相信很多人在Java设计模式之组合模式实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java设计模式之组合模式实例分析”的疑惑有所...
    99+
    2023-06-30
  • PHP用trait或组合模式实现多继承的方法
    本篇内容主要讲解“PHP用trait或组合模式实现多继承的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP用trait或组合模式实现多继承的方法”吧!PHP的类继承只能是单继承,不能多继...
    99+
    2023-06-20
  • asp.net 组合模式的一个例子
    代码如下: using System; using System.Collections.Generic; using System.Linq; using System.T...
    99+
    2022-06-07
    net ASP.NET 组合模式 ASP
  • PHP结构型模式之组合模式怎么实现
    今天小编给大家分享一下PHP结构型模式之组合模式怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。组合模式(Compos...
    99+
    2023-07-05
  • PHP组合模式优点与实现方法是什么
    这篇文章主要介绍“PHP组合模式优点与实现方法是什么”,在日常操作中,相信很多人在PHP组合模式优点与实现方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP组合模式优点与实现方法是什么”的疑惑有所...
    99+
    2023-07-05
  • Java设计模式之组合模式的示例详解
    目录定义原理类图案例需求方案分析总结定义 组合模式,又叫部分整体模式,它创建了对象组的数据结构(将对象组合成树状结构,用来表示部分整体的层级关系)组合模式使得用户对单个对象和组合对象...
    99+
    2022-11-13
  • Java设计模式中的组合模式
    目录模式介绍UML类图组合模式案例组合模式的注意事项和细节模式介绍 组合模式(Composite Pattern),又叫部分整体模式,它创建了对象组的树形结构,将对象组合成树状结构以...
    99+
    2022-11-13
  • Python的组合模式与责任链模式编程示例
    组合模式 我们把Composite模式看成一个复杂的属性结构,其实基本有三种角色:树干(定义一些操作树叶leaf的操作),树枝(树干上有很多树枝)和树叶(树干想要具体操作的对象) ,Composite模式帮...
    99+
    2022-06-04
    模式 组合 示例
  • Python中结构型组合模式的示例分析
    这篇文章将为大家详细讲解有关Python中结构型组合模式的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、组合模式组合,将多个对象组合成为一个树状结构,来表示业务逻辑上的层次。组合模式使得用户对...
    99+
    2023-06-29
  • java中怎么实现组合模式
    本篇文章给大家分享的是有关java中怎么实现组合模式,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。组合模式组合模式(Composite Pattern)又叫部分整体模式,是用于...
    99+
    2023-06-20
  • Java的组合模式怎么实现
    本篇内容介绍了“Java的组合模式怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、什么是组合模式Compose objects i...
    99+
    2023-07-05
  • PHP中模板方法模式的示例分析
    小编给大家分享一下PHP中模板方法模式的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!模板方法模式,也是我们经常会在不经意间有会用到的模式之一。这个模式是...
    99+
    2023-06-20
  • Java结构型模式中的组合模式详解
    目录一.介绍二.UML类图1.透明方式2.安全方式三.具体代码四.使用场景五.优点一.介绍 组合模式(Composite Pattern)属于结构型模式。组合模式又叫作部分整体模式,...
    99+
    2023-02-16
    Java结构型模式 Java组合模式
  • 快速理解Java设计模式中的组合模式
    组合模式是一种常见的设计模式(但我感觉有点复杂)也叫合成模式,有时又叫做部分-整体模式,主要是用来描述部分与整体的关系。个人理解:组合模式就是将部分组装成整体。定义如下:将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象...
    99+
    2023-05-30
    java 设计模式 ava
  • 设计模式中的单例模式与PHP中的应用
    引言:设计模式是在软件设计过程中,经验丰富的软件工程师总结出来的一些解决特定问题的经典模式。其中,单例模式是最常用的设计模式之一。单例模式确保一个类只有一个实例,并提供了一个全局访问点来访问这个实例。在PHP中,单例模式被广泛应用于各种场景...
    99+
    2023-10-21
    单例模式 设计模式 PHP应用
  • php桥接模式的实例用法及代码分析
    说明 1、将两个原本不相关的类结合在一起,然后利用两个类中的方法和属性,输出一份新的结果。 2、结构分为Abstraction抽象类、RefindAbstraction被提炼的抽象类...
    99+
    2022-11-12
  • Python中单例模式的实现方法
    单例 — 让 类 创建的对象,在系统中 只有唯一的一个实例; 1)、定义一个类属性,初始值是 None ,用于记录 单例对象的引用;2)、重写 new 方法;3)、如果 ...
    99+
    2022-11-11
  • reactrenderprops模式实现组件复用示例
    目录一 render props的使用步骤二 组件的复用三 使用children名代替属性一 render props的使用步骤 1 创建要复用的组件,在组件中提供要复用的状态逻辑代...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作