php设计模式课程---7、装饰器模式如何使用

一、总结

一句话总结:

装饰器的核心是获取了文章类整个类,而不是获取了文章内容,有了这个文章类,我想给你加多少装饰就给你加多少装饰(将文章这个类封装进去),在这个类的外部,在装饰器中。
 4 class Art {
 5     protected $content;  6 public function __construct($content) {  7 $this->content = $content;  8  }  9 10 public function decorator() { 11 return $this->content; 12  } 13 } 14 15 class Artdec extends Art {//装饰基类 16 protected $art = null; 17 18 public function __construct($art) { 19 $this->art = $art; 20  } 21 22 public function decorator() { 23  } 24 }

1、装饰器的装饰放在哪?

装饰器相当于可以实现多继承在装饰和本体之间放东西(装饰类里面的方法属性),而不是在本体里面放东西:比如说在seo装饰类里面加个属性
15 class Artdec extends Art {//装饰基类
16 protected $art = null; 17 18 public function __construct($art) { 19 $this->art = $art; 20  } 21 22 public function decorator() { 23  } 24 } 25 26 class SeoArt extends Artdec {//seo装饰类 27 public function decorator() { 28 return $this->art->decorator() . ' SEO keywords'; 29  } 30 }

2、不同装饰类之间的层级关系如何?

装饰基类其实是在文章类上面套了一个盒子,把文章类包起来了。
不同的装饰类之间平级,不同的装饰类之间可以互相嵌套。就像给文章类这个东西加上一层层的装饰盒子一样。
15 class Artdec extends Art {//装饰基类
16 protected $art = null; 17 18 public function __construct($art) { 19 $this->art = $art; 20  } 21 22 public function decorator() { 23  } 24 } 25 26 class SeoArt extends Artdec {//seo装饰类 27 public function decorator() { 28 return $this->art->decorator() . ' SEO keywords'; 29  } 30 } 31 32 class AdArt extends Artdec {//广告装饰类 33 public function decorator() { 34 return $this->art->decorator() . ' 广告内容'; 35  } 36 }

3、装饰模式如何使用?

用一个装饰类去包装其它或包装或没包装的类
38 $art = new Art('这是一篇普通文件');
39 $art = new SeoArt($art); 40 $art = new AdArt($art); 41 42 echo $art->decorator() , "<br>"; 43 44 45 $zz = new Art('这是一篇政治文件'); 46 $zz = new SeoArt($zz); 47 echo $zz->decorator();

二、装饰器模式如何使用

1、代码

场景:一篇文章既加seo又加广告

装饰器模式代码

 1 <?php
 2 // 装饰器模式
 3
 4 class Art {
 5     protected $content;
 6     public function __construct($content) {
 7         $this->content = $content;
 8     }
 9
10     public function decorator() {
11         return $this->content;
12     }
13 }
14
15 class Artdec extends Art {//装饰基类
16     protected $art = null;
17
18     public function __construct($art) {
19         $this->art = $art;
20     }
21
22     public function decorator() {
23     }
24 }
25
26 class SeoArt extends Artdec {//seo装饰类
27      public function decorator() {
28         return $this->art->decorator() . ' SEO keywords';
29     }
30 }
31
32 class AdArt extends Artdec {//广告装饰类
33     public function decorator() {
34         return $this->art->decorator() . ' 广告内容';
35     }
36 }
37
38 $art = new Art('这是一篇普通文件');
39 $art = new SeoArt($art);
40 $art = new AdArt($art);
41
42 echo $art->decorator() , "<br>";
43
44
45 $zz = new Art('这是一篇政治文件');
46 $zz = new SeoArt($zz);
47 echo $zz->decorator();
48 ?>

非装饰器模式代码

 1 <?php
 2 // 装饰器模式
 3
 4 class Art {
 5     protected $content;
 6     public function __construct($content) {
 7         $this->content = $content;
 8     }
 9
10     public function decorator() {
11         return $this->content;
12     }
13 }
14
15 class SeoArt extends Art {
16     public function decorator() {
17         return parent::decorator() . ' SEO Keywords';
18     }
19 }
20
21 class AdArt extends SeoArt {
22     public function decorator() {
23         return parent::decorator() . ' 广告文本';
24     }
25 }
26
27 /*
28 $art = new SeoArt('世界大力世比赛');
29 echo $art->decorator();
30 */
31
32 $ad = new AdArt('世界大力世比赛');
33 echo $ad->decorator();
34
35
36 ?>

转载于:https://www.cnblogs.com/Renyi-Fan/p/9584121.html

php设计模式课程---7、装饰器模式如何使用相关推荐

  1. 设计模式之【装饰器模式】

    和表妹去喝奶茶 表妹:哥啊,我想喝奶茶. 我:走啊,去哪里喝? 表妹:走,我带你去,我经常去的那家,不但好喝,还可以自由搭配很多小料.我每次都是不同的搭配,换着喝,嘻嘻. 我:你倒是挺会喝的嘛~ 你看 ...

  2. 设计模式篇——初探装饰器模式

    文章目录 1.装饰器模式介绍 2.装饰器模式类图 3.装饰器模式Demo实现(一个小镇的拉面馆) 4.装饰器模式总结 装饰器模式介绍:装饰器模式可以在不修改任何底层代码的情况下,给对象赋予新的职责(程 ...

  3. Java设计模式12:装饰器模式

    装饰器模式 装饰器模式又称为包装(Wrapper)模式.装饰器模式以多客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰器模式的结构 通常给对象添加功能,要么直接修改对象添加相应的功能, ...

  4. java中装饰器_Java设计模式12:装饰器模式

    装饰器模式 装饰器模式又称为包装(Wrapper)模式.装饰器模式以多客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰器模式的结构 通常给对象添加功能,要么直接修改对象添加相应的功能, ...

  5. 《设计模式》之装饰器模式

    一.什么是装饰器模式 当需要对类的功能进行拓展时,一般可以使用继承,但如果需要拓展的功能种类很繁多,那势必会生成很多子类,增加系统的复杂性,并且使用继承实现功能拓展时,我们必须能够预见这些拓展功能,也 ...

  6. Java设计模式之《装饰器模式》及应用场景

    一.概述 装饰器模式作用是针对目标方法进行增强,提供新的功能或者额外的功能. 不同于适配器模式和桥接模式,装饰器模式涉及的是单方,和代理模式相同,而且目标必须是抽象的. 而实际上,装饰器模式和代理模式 ...

  7. Java设计模式之《装饰器模式》

    一.概述 装饰器模式作用是针对目标方法进行增强,提供新的功能或者额外的功能. 不同于适配器模式和桥接模式,装饰器模式涉及的是单方,和代理模式相同,而且目标必须是抽象的. 而实际上,装饰器模式和代理模式 ...

  8. 【Java设计模式系列】装饰器模式(Decorator Pattern)

    简介 一般有两种方式可以给一个类或对象新增行为: 继承 子类在拥有自身方法同时还拥有父类方法.但这种是静态的,用户无法控制增加行为的方式和时机. 关联 将一个类的对象嵌入另一个对象,由另一个对象决定是 ...

  9. 重学 Java 设计模式:实战装饰器模式(SSO单点登录功能扩展,增加拦截用户访问方法范围场景)

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获!

  10. 面向对象程序设计(OOP设计模式)-结构型模式之装饰器模式的应用与实现

    课程名称:程序设计方法学 实验4:OOP设计模式-结构型模式的应用与实现 时间:2015年11月18日星期三,第3.4节 地点:理1#208 一.实验目的 加深对结构型设计模式的理解以及在开发中的实际 ...

最新文章

  1. Hash 函数资源链接汇总
  2. Openstack 安装部署指南翻译系列 之 概况
  3. python实现http请求并发_Python使用grequests并发发送请求
  4. 系统安全防护之UNIX下***检测方法
  5. 测试一体机风扇分贝软件,9款小风扇深度横评,风力、噪音测试加拆解,告诉你谁最值得买...
  6. 【英语学习】【Level 08】U02 Movie Time L4 From the page to the big screen
  7. iOS iPhone官方参考资料明细
  8. python计算公式程序_小学生计算题的自动程序Python,生成,python
  9. AWS ec2 安装手记
  10. Android中动画参数duration,Android基本动画设置
  11. Firefox火狐浏览器打开网页京东 http://www.jd.com/?l=1err=3 报错
  12. 任意一个c语言程序实例,C语言程序实例大全下载-C语言程序设计实例大全 - 河东下载站...
  13. 开源免费cms---十大主流建站的CMS系统介绍
  14. fanc 机器人_24个FANUC机器人的视觉功能详细介绍
  15. 红石外汇 RedstoneFX|每日汇评:日元在央行温和数据发布后,等待美国关键通胀数据
  16. redis的数据库通知(notify-keyspace-events)
  17. 如何成功搭建一个游戏平台?
  18. python中namedtuple的用法
  19. Android 学习论坛博客及网站推荐 1
  20. 快手吃的是“大直播”红利,百度微信正跑步入场

热门文章

  1. RESTFUL协议入门介绍
  2. Linux signal 编程(转载)
  3. SSIS 连接ORACLE 无法从 SQL 命令中提取参数的解决方案
  4. Potted Flower(线段树+dp)
  5. Chaos网络库(三)- 主循环及异步消息的实现
  6. [转]程序员最容易犯的几个技术上的错误
  7. 在Flash中接收来自页面(.NET)的值的方法.
  8. windows下安装node版本管理工具及nvm use切换不成功问题解决
  9. 关于通过webclient和JSON格式报文与服务器之间通讯的解决方法和遇到的难题
  10. 安装git之后,桌面出现蓝色问号的解决方法