zoukankan      html  css  js  c++  java
  • 设计模式之组合模式(PHP实现)

    
    
    github地址:https://github.com/ZQCard/design_pattern
    /**

    组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。

    
    

    这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。

    
     * 组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。
     * 组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。
     * 这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。
     * 我们通过下面的实例来演示组合模式的用法。实例演示了一个组织中员工的层次结构。
     */

    (1)Employee.class.php

    <?php
    
    namespace Composite;
    
    class Employee
    {
        private $name;
        private $dept;
        private $salary;
        private $subordinates = [];
    
        public function __construct($name, $dept, $salary)
        {
            $this->name = $name;
            $this->dept = $dept;
            $this->salary = $salary;
        }
    
        public function add(Employee $employee)
        {
            $this->subordinates[] = $employee;
        }
    
        public function remove(Employee $employee)
        {
                    
        }
    
        public function getSubordinates()
        {
            return $this->subordinates;
        }
    }

    (2)composite.php

    <?php
    spl_autoload_register(function ($className){
        $className = str_replace('\','/',$className);
        include $className.".class.php";
    });
    
    use CompositeEmployee;
    
    $CEO = new Employee("John","CEO", 30000);
    
    $headSales = new Employee("Robert","Head Sales", 20000);
    
    $headMarketing = new Employee("Michel","Head Marketing", 20000);
    
    $clerk1 = new Employee("Laura","Marketing", 10000);
    $clerk2 = new Employee("Bob","Marketing", 10000);
    
    $salesExecutive1 = new Employee("Richard","Sales", 10000);
    $salesExecutive2 = new Employee("Rob","Sales", 10000);
    
    $CEO->add($headSales);
    $CEO->add($headMarketing);
    
    $headSales->add($salesExecutive1);
    $headSales->add($salesExecutive2);
    
    $headMarketing->add($clerk1);
    $headMarketing->add($clerk2);
    
    $subordinates = $CEO->getSubordinates();
    echo '<pre/>';
    var_dump($subordinates);die;
  • 相关阅读:
    C++_重载、重写和重定义的区别
    C++静态库与动态库
    C++ 中重载运算符 “<” 及 friend属性
    C++中,关于#include<***.h>和#include"***.h"的区别
    static_cast, dynamic_cast, const_cast讨论
    浅析C++中static关键字
    C语言包含头文件时用引号和尖括号的区别
    vc实现透明位图,透明背景
    VS2008调试技巧——断点失效
    Spring解决循环依赖的理解
  • 原文地址:https://www.cnblogs.com/zhouqi666/p/9141182.html
Copyright © 2011-2022 走看看