设计模式之: 装饰器模式
什么是装饰器模式
什么时候使用装饰器模式
简单的装饰器例子
Component接口
<?php
abstract class IComponent
{protected $site;abstract public function getSite();abstract public function getPrice();
}
Decorator接口
<?php
abstract class Decorator extends IComponent
{/*任务是维护Component的引用继承getSite()和getPrice()因为仍然是抽象类,所以不需要实现父类任何一个抽象方法*/
}
具体组件
<?php
class BasicSite extends IComponent
{public function __construct(){$this->site = "Basic Site";}public function getSite(){return $this->site;}public function getPrice(){return 1200;}
}
具体装饰器
<?php
class Maintenance extends Decorator
{public function __construct(IComponent $siteNow){$this->site = $siteNow;}public function getSite(){$format = "<br /> Maintenance";return $this->site->getSite() . $format;}public function getPrice(){return 950 + $this->site->getPrice();}
}
<?php
class Video extends Decorator
{public function __construct(IComponent $siteNow){$this->site = $siteNow;}public function getSite(){$format = "<br /> Video";return $this->site->getSite() . $format;}public function getPrice(){return 350 + $this->site->getPrice();}
}
<?php
class DataBase extends Decorator
{public function __construct(IComponent $siteNow){$this->site = $siteNow;}public function getSite(){$format = "<br /> DataBase";return $this->site->getSite() . $format;}public function getPrice(){return 800 + $this->site->getPrice();}
}
客户
<?php
function __autoload($class_name)
{include $class_name . '.php';
}
class Client
{private $basicSite;public function __construct(){$this->basicSite = new BasicSite();$this->basicSite = $this->WrapComponent($this->basicSite);$siteShow = $this->basicSite->getSite();$format = "<br /> <strong>Total= $";$price = $this->basicSite->getPrice();echo $siteShow . $format . $price . "</strong>";}private function WrapComponent(IComponent $component){$component = new Maintenance($component);$component = new Video($component);$component = new DataBase($component);return $component;}
}
$worker = new Client();
Basic SiteMaintenanceVideoDataBaseTotal= $3300
$component = new Maintenance($component);
转载于:https://www.cnblogs.com/chenqionghe/p/4782222.html
设计模式之: 装饰器模式相关推荐
- 设计模式学习----装饰器模式
这两天本来是自在学习java collection Framework的Fail Fast底层机制,看到核心的部分时,突然意识到设计模式的问题,上大学到现在我还没有真正理解过设计模式的概念,于是用了大 ...
- 【设计模式】装饰器模式的使用
问题来源 我们在进行软件系统设计的时候,有一些业务(如下图,一些通用的非功能性需求)是多个模块都需要的,是跨越模块的.把它们放到什么地方呢? 最简单的办法就是把这些通用模块的接口写好,让程序员在实现业 ...
- go设计模式之装饰器模式
go设计模式之装饰器模式 再写这篇文章时,我已经看了很多其他人发表的类似文章,大概看了这么多吧. 亓斌的设计模式-装饰者模式(Go语言描述) jeanphorn的Golang设计模式之装饰模式 七八月 ...
- python中的装饰器、装饰器模式_python 设计模式之装饰器模式 Decorator Pattern
#写在前面 已经有一个礼拜多没写博客了,因为沉醉在了<妙味>这部小说里,里面讲的是一个厨师苏秒的故事.现实中大部分人不会有她的天分.我喜欢她的性格:总是想着去解决问题,好像从来没有怨天尤人 ...
- python 设计模式之装饰器模式 Decorator Pattern
#写在前面 已经有一个礼拜多没写博客了,因为沉醉在了<妙味>这部小说里,里面讲的是一个厨师苏秒的故事.现实中大部分人不会有她的天分.我喜欢她的性格:总是想着去解决问题,好像从来没有怨天尤人 ...
- 零基础学习设计模式之装饰器模式(配套视频)
零基础学习设计模式之装饰器模式 定义 在不改变目标结构的情况下,动态的给对象增加功能 举例 如房子装修.相片加相框等,都是装饰器模式. 基本组件 抽象构件(Component)角色:定义一个抽象接口以 ...
- 详解设计模式:装饰器模式
装饰器模式(Decorator Pattern)也称为包装模式(Wrapper Pattern),是 GoF 的 23 种设计模式中的一种结构型设计模式.装饰器模式 是指在不改变原有对象的基础之上,将 ...
- javascript设计模式之装饰器模式(结构型模式)
javascript设计模式之装饰器模式 js的设计模式分为创建型模式,结构型模式和行为模式 结构模式描述了如何组合对象以提供新的功能. 装饰器模式是一种常见的结构型模式,我们可以以一个基础对象为基础 ...
- 设计模式之装饰器模式详解
设计模式之装饰器模式详解 文章目录 设计模式之装饰器模式详解 一.什么是装饰器模式 二.装饰器模式的角色组成 三.装饰器模式通用写法示例 四.装饰器模式业务中的应用举例 五.装饰器模式优缺点 一.什么 ...
- 装饰者模式 php,PHP设计模式之装饰器模式
装饰器设计模式 什么是装饰器模式 装饰器模式就是对一个已有的结构增加装饰.装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象 ...
最新文章
- 上海大学建了一个“突发事件语料库”,包括地震、恐怖袭击等5大类
- css3 各种纸张贴纸效果
- access字段属性设置下拉列表_可嵌入您系统的.NET 报表控件ActiveReports:带状列表组件...
- CNN基础知识(2)
- 用C语言实现SGF格式围棋棋谱解析器
- 给定数字的b+树创建_在C ++中找到给定数字中的两个的下一个和上一个幂
- Linux内存管理:内存寻址之分段机制与分页机制
- 退休后你和原工作单位还有联系吗?
- 用Python爬了下知乎上的高颜值小姐姐后,我兴奋的睡不着觉!
- java 镶嵌创建线程_请教一个 Java 多线程嵌套使用的问题
- 解决办法:gtk_image_menu_item_set_image()菜单图标无法显示
- 安徽工业大学java实验报告_安徽工业大学java实验报告.doc
- Pano2VR制作全景漫游
- Error: DPI-1047: Cannot locate a 64-bit Oracle Client library: “问题
- 前端_http协议_html语言headbody基本介绍和用法
- 共享LPT口打印机打印时,注意事项
- 【面试积累】牛人的面试技巧分享
- python获取登录后的cookie_python爬虫使用cookie登录详解
- 垃圾填埋场渗滤液的主流处理方法
- 前端效果积累 |别具一格的3D酷炫轮播图效果收集