php八大设计模式之装饰器模式
我们都知道,得到一匹布需要大概这么几步:
1、染色
2、印花
3、裁剪
这种形式在面向对象中怎么实现呢?
面向过程【继承模式】实现:
继承模式得到需要的布料,一步一步的加工。
继承的层次越来越深,扩展性差。如果中间加道其他程序,就有些吃力了。
<?php
header("content-type:text/html;charset=utf8");
class BaseCloth{ //布料初始的样子
protected $content;
public function __construct($con){
$this->content=$con;
}
public function cloth(){
return $this->content;
}
}
class DyeingCloth extends BaseCloth{ //染色
public function dyeing(){
return $this->content." --->染上色";
}
}
class StampCloth extends DyeingCloth{ //印花
public function stamp(){
return $this->content." --->印上好看的花";
}
}
class CutCloth extends StampCloth{ //裁剪
public function cut(){
return $this->content." --->根据需求裁剪";
}
}
//布料加工。
$cloth= new BaseCloth("白布");
$dyeing=new DyeingCloth($cloth->cloth());
$stamp=new StampCloth($dyeing->dyeing());
$cut=new CutCloth($stamp->stamp());
echo $cut->cut();
?>
装饰器模式实现布匹加工。
<?php
header("content-type:text/html;charset=utf8");
/**
* 装饰器模式完成布料的加工。动态、扩展性好。
*/
class BaseCloth{ //布料的初始样子
protected $content;
public function __construct($con){
$this->content=$con;
}
public function cloth(){
return $this->content;
}
}
class DyeingCloth extends BaseCloth{ //染色
public function __construct(BaseCloth $cloth){
$this->cloth=$cloth;
$this->cloth();
}
public function cloth(){
return $this->cloth->cloth()." --->染上色";
}
}
class StampCloth extends BaseCloth{ //印花
public function __construct(BaseCloth $cloth){
$this->cloth=$cloth;
$this->cloth();
}
public function cloth(){
return $this->cloth->cloth()." --->印上花";
}
}
class CutCloth extends BaseCloth{ //裁剪
public function __construct(BaseCloth $cloth){
$this->cloth=$cloth;
$this->cloth();
}
public function cloth(){
return $this->cloth->cloth()." --->根据需求裁剪";
}
}
//布料加工。
$con=new CutCloth(new DyeingCloth(new BaseCloth("白布")));
echo $con->cloth();
?>
php八大设计模式之装饰器模式的更多相关文章
- python 设计模式之装饰器模式 Decorator Pattern
#写在前面 已经有一个礼拜多没写博客了,因为沉醉在了<妙味>这部小说里,里面讲的是一个厨师苏秒的故事.现实中大部分人不会有她的天分.我喜欢她的性格:总是想着去解决问题,好像从来没有怨天尤人 ...
- PHP设计模式之装饰器模式(Decorator)
PHP设计模式之装饰器模式(Decorator) 装饰器模式 装饰器模式允许我们给一个类添加新的功能,而不改变其原有的结构.这种类型的类属于结构类,它是作为现有的类的一个包装 装饰器模式的应用场景 当 ...
- python设计模式之装饰器模式
装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰 ...
- PHP设计模式之装饰器模式
装饰器模式:如果已有对象的部分内容或功能性发生改变,但是不需要修改原始对象的结构或不使用继承,动态的扩展一个对象的功能,则应该使用装饰器模式.简单点说:就是我们不应该去修改已有的类,而是通过创建另外一 ...
- java设计模式之 装饰器模式
装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构. 这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装 ...
- php设计模式八-----装饰器模式
1.介绍: 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰 ...
- Java设计模式系列-装饰器模式
原创文章,转载请标注出处:<Java设计模式系列-装饰器模式> 一.概述 装饰器模式作用是针对目标方法进行增强,提供新的功能或者额外的功能. 不同于适配器模式和桥接模式,装饰器模式涉及的是 ...
- c#设计模式之装饰器模式(Decorator Pattern)
引子 在面向对象语言中,我们常常会听到这样一句话:组合优于继承.那么该如何去理解这句话呢? 下面我将以游戏装备为模型用简单的代码去展示它 先创建一个装备的抽象类,然后创建刀枪2个具体的业务子类 pub ...
- 设计模式之装饰器模式(PHP实现)
/** * 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. * 这种模式创建了一个 ...
随机推荐
- Xshell dns tunnel攻击
该域名还会向多个超长域名做渗出,且域名采用了 DGA 生成算法,通过 DNS 解析时渗出数据. 部分生成域名如下: sajajlyoogrmkjlkmosbxowcrmwlvajdkbtbjoylyp ...
- xBIM 基础09 WeXplorer 基本应用
系列目录 [已更新最新开发文章,点击查看详细] 在本教程中,将学习如何创建最基本和最直接的查看器. 除了展示建筑模型外,不做其他任何操作.它将只使用内置导航,但是不会对按钮做出事件响应. &l ...
- 计算label
func getCGSize(size:CGSize,fontSize:CGFloat,text:String)->CGSize{ let attributes = [NSFontAttribu ...
- miniUI打开一个新的画面(ondestroy)
转自:http://blog.csdn.net/u012934325/article/details/77914691 需求:开发中需求通过点击父界面一个按钮弹出一个子界面,在miniUI中我们可以这 ...
- Windows 安装PostgreSQL
下载二进制包:https://www.enterprisedb.com/download-postgresql-binaries 直接解压到C盘 Microsoft Windows [版本 6.3.9 ...
- HDU 1175 连连看【BFS】
题意:给出起点和终点的棋子,不能经过别的棋子,而且转弯的次数不能超过2次,问能否消除 和逃离迷宫一样,每个节点记录下来它的当前的方向和转弯的次数,再搜 注意特判起点的棋子和终点的棋子为0或者不一样的情 ...
- SpringBoot学习笔记(13)----使用Spring Session+redis实现一个简单的集群
session集群的解决方案: 1.扩展指定server 利用Servlet容器提供的插件功能,自定义HttpSession的创建和管理策略,并通过配置的方式替换掉默认的策略.缺点:耦合Tomcat/ ...
- CF666E Forensic Examination 广义后缀自动机_线段树合并_树上倍增
题意: 给定一个串 $S$ 和若干个串 $T_{i}$每次询问 $S[pl..pr]$ 在 $Tl..Tr$ 中出现的最多次数,以及出现次数最多的那个串的编号. 数据范围: 需要离线 题解:首先,很常 ...
- grant 命令
创建拥有所有权限账户.可以远程连接.并且允许用户再将该权限授予其它用户: grant all privileges on *.* to root @"%" identified b ...
- NOIp2018模拟赛四十四
加量不加价?! 昨晚看时间变成了3.5h以为终于变成了正常难度,结果还是国家集训队作业... A题看起来很神仙,B题看上去很神仙,C题一看就知道很神仙: 结果发现B是假题,放榜后发现A也是假题,C是Y ...