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)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. * 这种模式创建了一个 ...
随机推荐
- zzulioj--1633--Happy Thanksgiving Day - Hateable Name(字符串筛选)
1633: Happy Thanksgiving Day - Hateable Name Time Limit: 1 Sec Memory Limit: 128 MB Submit: 75 ...
- 手动配置IP网络
1. #vi /etc/sysconfig/network-scripts/ifcfg-ens33 ifcfg-ens33 是网卡的名字,根据自己的计算机 2. 修改配置 ONBOOT=no改为ONB ...
- C#post调用接口并上传文件
/// <summary> /// C#调用接口上传json数据,并且带文件上传 /// </summary> /// <param name="url&quo ...
- 递归版快速排序-JS代码
"use strict" var arr1=[11,21,3,4,0]; function qSort(arr){ var mid,left,right,len,i,j,empty ...
- 中文版 Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks 摘要 最先进的目标检测网络依靠区域提出算法 ...
- 转Hibernate继承
hibernate继承映射 以下测试是在mysql中进行的. 1.单表方式 Animal.java @Entity @Inheritance(strategy=InheritanceType.SING ...
- opengl问题
1.glCreateShader(GL_VERTEX_SHADER)失败原因: 在调用glewInit()初始化之后才能create shader;
- java中,length,length(),size()区别
length——数组的属性: length()——String的方法: size()——集合的方法:
- How Javascript works (Javascript工作原理) (十) 使用 MutationObserver 监测 DOM 变化
个人总结: 这篇文章介绍了几种监测DOM变化的方法,重点介绍的是一个新浏览器API叫做MutationObserver. 注意:不要和Vue.js种 Object.defineProperty() 的 ...
- BZOJ 1951 [SDOI2010]古代猪文 (组合数学+欧拉降幂+中国剩余定理)
题目大意:求$G^{\sum_{m|n} C_{n}^{m}}\;mod\;999911659\;$的值$(n,g<=10^{9})$ 并没有想到欧拉定理.. 999911659是一个质数,所以 ...