返回顶部
首页 > 资讯 > 后端开发 > 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://lsjlt.com/news/298165.html(转载时请注明来源链接)

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

猜你喜欢
  • PHP中的组合模式用法实例
    这篇文章主要讲解了“PHP中的组合模式用法实例”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP中的组合模式用法实例”吧!互联网公司流行扁平化管理,也就是管理层级尽量少于或者不超过三层,作...
    99+
    2023-06-20
  • php设计模式-组合模式的运用
    介绍 PHP的组合模式是一种设计模式,用于将对象组合成树形结构以表示“部分-整体”的层次结构。该模式允许客户端统一处理单个对象和组合对象,使得客户端在处理对象时不需要知道对象是否为单个对象还是组合对...
    99+
    2023-08-31
    组合模式 php 设计模式
  • PHP用trait或组合模式实现多继承的方法
    本篇内容主要讲解“PHP用trait或组合模式实现多继承的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP用trait或组合模式实现多继承的方法”吧!PHP的类继承只能是单继承,不能多继...
    99+
    2023-06-20
  • Java设计模式之组合模式实例分析
    这篇文章主要介绍“Java设计模式之组合模式实例分析”,在日常操作中,相信很多人在Java设计模式之组合模式实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java设计模式之组合模式实例分析”的疑惑有所...
    99+
    2023-06-30
  • PHP结构型模式之组合模式
    目录组合模式(Composite Pattern)是什么组合模式的优点组合模式的实现组合模式的使用总结组合模式(Composite Pattern)是什么 组合模式是一种结构型模式,...
    99+
    2023-05-14
    PHP结构型模式 PHP组合模式
  • PHP结构型模式之组合模式怎么实现
    今天小编给大家分享一下PHP结构型模式之组合模式怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。组合模式(Compos...
    99+
    2023-07-05
  • Java设计模式中的组合模式
    目录模式介绍UML类图组合模式案例组合模式的注意事项和细节模式介绍 组合模式(Composite Pattern),又叫部分整体模式,它创建了对象组的树形结构,将对象组合成树状结构以...
    99+
    2024-04-02
  • asp.net 组合模式的一个例子
    代码如下: using System; using System.Collections.Generic; using System.Linq; using System.T...
    99+
    2022-06-07
    net ASP.NET 组合模式 ASP
  • PHP组合模式优点与实现方法是什么
    这篇文章主要介绍“PHP组合模式优点与实现方法是什么”,在日常操作中,相信很多人在PHP组合模式优点与实现方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP组合模式优点与实现方法是什么”的疑惑有所...
    99+
    2023-07-05
  • JavaScript设计模式组合设计模式案例
    目录前言组合设计模式的业务场景组合设计模式小案例前言 组合设计模式是用于将多个部分通过组合的方式行成一个整体,就比如我们去吃饭,点了一份米饭和一份鱼香肉丝,这些东西可以看成一个部分,...
    99+
    2024-04-02
  • java中怎么实现组合模式
    本篇文章给大家分享的是有关java中怎么实现组合模式,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。组合模式组合模式(Composite Pattern)又叫部分整体模式,是用于...
    99+
    2023-06-20
  • Java设计模式之组合模式的示例详解
    目录定义原理类图案例需求方案分析总结定义 组合模式,又叫部分整体模式,它创建了对象组的数据结构(将对象组合成树状结构,用来表示部分整体的层级关系)组合模式使得用户对单个对象和组合对象...
    99+
    2024-04-02
  • Python中结构型组合模式的示例分析
    这篇文章将为大家详细讲解有关Python中结构型组合模式的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、组合模式组合,将多个对象组合成为一个树状结构,来表示业务逻辑上的层次。组合模式使得用户对...
    99+
    2023-06-29
  • Python的组合模式与责任链模式编程示例
    组合模式 我们把Composite模式看成一个复杂的属性结构,其实基本有三种角色:树干(定义一些操作树叶leaf的操作),树枝(树干上有很多树枝)和树叶(树干想要具体操作的对象) ,Composite模式帮...
    99+
    2022-06-04
    模式 组合 示例
  • 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组合模式
  • 设计模式中的单例模式与PHP中的应用
    引言:设计模式是在软件设计过程中,经验丰富的软件工程师总结出来的一些解决特定问题的经典模式。其中,单例模式是最常用的设计模式之一。单例模式确保一个类只有一个实例,并提供了一个全局访问点来访问这个实例。在PHP中,单例模式被广泛应用于各种场景...
    99+
    2023-10-21
    单例模式 设计模式 PHP应用
  • Composite组合模式怎么实现
    本文小编为大家详细介绍“Composite组合模式怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Composite组合模式怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新...
    99+
    2024-04-02
  • java如何实现组合模式
    小编给大家分享一下java如何实现组合模式,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!介绍组合模式又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素...
    99+
    2023-05-30
    java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作