PHP设计模式——装饰器模式

    xiaoxiao2021-03-25  67

    WEB开发笔记 www.chhua.com 每日练习 PHP设计模式——装饰器模式

    装饰器模式与适配器模式的作用几乎是一样的,要深刻的理解装饰模式,就一定要记住“装饰”二字,很明显,就是在之前类的基础上进行一下修饰。也就是说,装饰器模式必须有父类,然后子类对父类进行装饰。

    下面用一个实例来说明一下装饰器模式的用法。

    我有用策略模式和装饰模式结合的方式来演示

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 <?php /* * * */   class printStr{//创建一个普通类 public $msg; public function __construct($msg=""){ $this->msg=$msg; } public function getMessage(){ return "This getMessage Str Function"; }   public function addNum($num1,$num2){ return $num1+$num2; } }   class partentZhuanshi {//父类 private $printClass; public function __construct($printClass){ $this->printClass=$printClass; }   public function addNum($num1,$num2){ return $this->printClass->addNum($num1,$num2);//简单的一个委托 } }   class zhuangshi extends partentZhuanshi{ private $printClass; public function __construct($printClass){ $this->printClass=$printClass; if ($this->printClass->msg==""){//装饰添加一个异常处理 throw new Exception($this->printClass->getMessage()); } } public function addNum($num1,$num2){ $total=$num1+$num2; if ($total<10){//装饰添加一个异常处理 throw new Exception($num1." add ".$num2." < 10"); } return $total; } }   try { $zhuanshi=new zhuangshi(new printStr("此处如果为空,则抛出异常")); } catch (Exception $e){ echo "异常一:".$e->getMessage(); }   try { echo $zhuanshi->addNum(10,2);//两个数据的和小于10抛出异常 } catch (Exception $e){ echo "异常二:".$e->getMessage(); }   ?>

    以上一个简单的实例说明了,策略模式用于更改和替换行为,装饰模式则是添加和装饰行为.

    自由转载,转载请注明: 转载自WEB开发笔记 www.chhua.com

    转载请注明原文地址: https://ju.6miu.com/read-39543.html

    最新回复(0)