php设计模式课程---7、装饰器模式如何使用
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.装饰器模式类图 3.装饰器模式Demo实现(一个小镇的拉面馆) 4.装饰器模式总结 装饰器模式介绍:装饰器模式可以在不修改任何底层代码的情况下,给对象赋予新的职责(程 ...
- Java设计模式12:装饰器模式
装饰器模式 装饰器模式又称为包装(Wrapper)模式.装饰器模式以多客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰器模式的结构 通常给对象添加功能,要么直接修改对象添加相应的功能, ...
- java中装饰器_Java设计模式12:装饰器模式
装饰器模式 装饰器模式又称为包装(Wrapper)模式.装饰器模式以多客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰器模式的结构 通常给对象添加功能,要么直接修改对象添加相应的功能, ...
- 《设计模式》之装饰器模式
一.什么是装饰器模式 当需要对类的功能进行拓展时,一般可以使用继承,但如果需要拓展的功能种类很繁多,那势必会生成很多子类,增加系统的复杂性,并且使用继承实现功能拓展时,我们必须能够预见这些拓展功能,也 ...
- Java设计模式之《装饰器模式》及应用场景
一.概述 装饰器模式作用是针对目标方法进行增强,提供新的功能或者额外的功能. 不同于适配器模式和桥接模式,装饰器模式涉及的是单方,和代理模式相同,而且目标必须是抽象的. 而实际上,装饰器模式和代理模式 ...
- Java设计模式之《装饰器模式》
一.概述 装饰器模式作用是针对目标方法进行增强,提供新的功能或者额外的功能. 不同于适配器模式和桥接模式,装饰器模式涉及的是单方,和代理模式相同,而且目标必须是抽象的. 而实际上,装饰器模式和代理模式 ...
- 【Java设计模式系列】装饰器模式(Decorator Pattern)
简介 一般有两种方式可以给一个类或对象新增行为: 继承 子类在拥有自身方法同时还拥有父类方法.但这种是静态的,用户无法控制增加行为的方式和时机. 关联 将一个类的对象嵌入另一个对象,由另一个对象决定是 ...
- 重学 Java 设计模式:实战装饰器模式(SSO单点登录功能扩展,增加拦截用户访问方法范围场景)
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获!
- 面向对象程序设计(OOP设计模式)-结构型模式之装饰器模式的应用与实现
课程名称:程序设计方法学 实验4:OOP设计模式-结构型模式的应用与实现 时间:2015年11月18日星期三,第3.4节 地点:理1#208 一.实验目的 加深对结构型设计模式的理解以及在开发中的实际 ...
最新文章
- Hash 函数资源链接汇总
- Openstack 安装部署指南翻译系列 之 概况
- python实现http请求并发_Python使用grequests并发发送请求
- 系统安全防护之UNIX下***检测方法
- 测试一体机风扇分贝软件,9款小风扇深度横评,风力、噪音测试加拆解,告诉你谁最值得买...
- 【英语学习】【Level 08】U02 Movie Time L4 From the page to the big screen
- iOS iPhone官方参考资料明细
- python计算公式程序_小学生计算题的自动程序Python,生成,python
- AWS ec2 安装手记
- Android中动画参数duration,Android基本动画设置
- Firefox火狐浏览器打开网页京东 http://www.jd.com/?l=1err=3 报错
- 任意一个c语言程序实例,C语言程序实例大全下载-C语言程序设计实例大全 - 河东下载站...
- 开源免费cms---十大主流建站的CMS系统介绍
- fanc 机器人_24个FANUC机器人的视觉功能详细介绍
- 红石外汇 RedstoneFX|每日汇评:日元在央行温和数据发布后,等待美国关键通胀数据
- redis的数据库通知(notify-keyspace-events)
- 如何成功搭建一个游戏平台?
- python中namedtuple的用法
- Android 学习论坛博客及网站推荐 1
- 快手吃的是“大直播”红利,百度微信正跑步入场
热门文章
- RESTFUL协议入门介绍
- Linux signal 编程(转载)
- SSIS 连接ORACLE 无法从 SQL 命令中提取参数的解决方案
- Potted Flower(线段树+dp)
- Chaos网络库(三)- 主循环及异步消息的实现
- [转]程序员最容易犯的几个技术上的错误
- 在Flash中接收来自页面(.NET)的值的方法.
- windows下安装node版本管理工具及nvm use切换不成功问题解决
- 关于通过webclient和JSON格式报文与服务器之间通讯的解决方法和遇到的难题
- 安装git之后,桌面出现蓝色问号的解决方法