<kbd id='woaibaidu'></kbd><address id='woaibaidu'><style id='woaibaidu'></style></address><button id='woaibaidu'></button>

          当前位置:主页 > 网络编程 > PHP编程 >
            PHP设计模式之装饰器模式实例详解
            2018-02-12 22:02 发布 次浏览

          本文实例讲述了PHP设计形式之装潢器形式。分享给各人供各人参考,详细以下:

          装潢器形式又叫装潢者形式。装潢形式是在不用改动原类文件和运用承继的状况下,静态地扩大1个工具的功用。它是经过创立1个包装工具,也就是装潢来包裹真实的工具。

          UML类图:

          角色:

          组件工具的接口:可以给这些工具静态的添加职责
          一切装潢器的父类:需求界说1个与组件接口分歧的接口,并持有1个Component工具,该工具其实就是被装潢的工具。
          详细的装潢器类:完成详细要向被装潢工具添加的功用。用来装潢详细的组件工具或许另外1个详细的装潢器工具。

          详细代码:

          <?php
          /**
           * Created by PhpStorm.
           * User: Jiang
           * Date: 2015/5/3
           * Time: 11:11
           */
          /**组件工具接口
           * Interface IComponent
           */
          interface IComponent
          {
            function Display();
          }
          /**待装潢工具
           * Class Person
           */
          class Person implements IComponent
          {
            private $name;
            function __construct($name)
            {
              $this->name=$name;
            }
            function Display()
            {
              echo "打扮的:{$this->name}<br/>";
            }
          }
          /**一切装潢器父类
           * Class Clothes
           */
          class Clothes implements IComponent
          {
            protected $component;
            function Decorate(IComponent $component)
            {
              $this->component=$component;
            }
            function Display()
            {
              if(!empty($this->component))
              {
                $this->component->Display();
              }
            }
          }
          //------------------------------详细装潢器----------------
          class PiXie extends Clothes
          {
            function Display()
            {
              echo "皮鞋 ";
              parent::Display();
            }
          }
          class QiuXie extends Clothes
          {
            function Display()
            {
              echo "球鞋 ";
              parent::Display();
            }
          }
          class Tshirt extends Clothes
          {
            function Display()
            {
              echo "T恤 ";
              parent::Display();
            }
          }
          class Waitao extends Clothes
          {
            function Display()
            {
              echo "外套 ";
              parent::Display();
            }
          }
          
          

          挪用客户端测试代码:

          header("Content-Type:text/html;charset=utf⑻");
          //------------------------装潢器形式测试代码------------------
          require_once "./Decorator/Decorator.php";
          $Yaoming=new Person("姚明");
          $aTai=new Person("A泰斯特");
          $pixie=new PiXie();
          $waitao=new Waitao();
          $pixie->Decorate($Yaoming);
          $waitao->Decorate($pixie);
          $waitao->Display();
          echo "<hr/>";
          $qiuxie=new QiuXie();
          $tshirt=new Tshirt();
          $qiuxie->Decorate($aTai);
          $tshirt->Decorate($qiuxie);
          $tshirt->Display();
          
          

          适用处景:

          1. 需求静态的给1个工具添加功用,这些功用可以再静态的撤消。

          2. 需求添加由1些根本功用的陈列组合而发生的十分少量的功用,从而使承继关系变的不理想。

          3. 当不能采取生成子类的办法停止扩大时。1种状况是,能够有少量独立的扩大,为支持每种组合将发生少量的子类,使得子类数目呈爆炸性增长。另外一种状况能够是由于类界说被隐藏,或类界说不能用于生成子类。

          更多关于PHP相干内容感兴味的读者可检查本站专题:《php面向工具顺序设计入门教程》、《PHP根本语法入门教程》、《PHP数组(Array)操作技能大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php罕见数据库操作技能汇总》

          希望本文所述对各人PHP顺序设计有所协助。