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)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. * 这种模式创建了一个 ...
随机推荐
- sts安装出现could not find jar:file解决办法,could not find jar:file,sts安装
标题sts插件下载好但是安装出错 我的eclipse是4.5.2,在官方网站https://spring.io/tools3/sts/legacy下载,压缩包的名字为:spring-tool-suit ...
- Linux下Python编译安装
1.安装python3 1.1下载python源码包 网址:https://www.python.org/downloads/release/python-362/ 下载地址:https://www. ...
- SPOJ 694/705 后缀数组
思路: 论文题*n Σn-i-ht[i]+1 就是结果 O(n)搞定~ //By SiriusRen #include <cstdio> #include <cstring> ...
- Codeforces 987A. Infinity Gauntlet(手速题,map存一下输出即可)
解法: 1.先将对应的字符串存入map. 2.然后将输入的串的second置为空. 3.输出6-n,输出map中的非空串. 代码: #include <bits/stdc++.h> usi ...
- 如何在Windows下安装Linux子系统(Ubuntu,openSUSU,SUSU Linux Server)
注意:只有win10才能安装,安装的linux没有图形界面. 1.首先在win10设置 --> 更新与安装 --> 针对开发人员 ,选择开发人员模式. 2.win10 Cortana -- ...
- Glide中的回调:targets
Glide隐藏了一大推复杂的在后台的场景,Glide做了所有的网络请求和处理在后台线程中,准备好了切回到ui线程后更新ImageView. 假设ImageView不再是图像的最后一步.我们只要Bitm ...
- 【摘录】JDBC Master Slave(JDBC方式的JMS集群)
JDBC Master Slave First supported in ActiveMQ version 4.1 If you are using pure JDBC and not using t ...
- SpringMVC-注解映射器和适配器_20190323
1 注解映射器和适配器 1.1 注解映射器spring3.1之前默认加载映射器是org.springframework.web.servlet.mvc.annotation.DefaultAnnota ...
- STM8S103 解决Rom空间不足 & Map文件分析
STM8S103只有8KRom,很容易造成空间不足.对于空间不足,我们就要从map文件着手分析,究竟哪些函数占了多少空间,map文件分为几部分:Segments(总括了各个段所占的空间), Modul ...
- H5中嵌入flash
<object height="900px" width="100%" classid="clsid:D27CDB6E-AE6D-11cf-96 ...