前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP Decorator 装饰器模式

PHP Decorator 装饰器模式

作者头像
Marco爱吃红烧肉
发布2021-07-23 15:28:32
2490
发布2021-07-23 15:28:32
举报
文章被收录于专栏:无敌小笼包无敌小笼包
  • 如果已有对象的部分内容或功能性发生改变,但是不需要修改原始的结构

迭代新的应用需求

代码语言:javascript
复制

/**
 * Decorator 装饰器模式
 * -------------------------------------
 * ** 来自说明 **
 *
 * 如果已有对象的部分内容或功能性发生改变,但是不需要修改原始的结构
 *
 * 刚开始楼主觉得这个他么怎么这么像 【 适配器模式 】
 * 然后又把适配器模式的理论复制了过来给各位观众老爷看
 * 
 * |-> 适配器模式: * 通过适配器模式能够使用新的代码和功能性来帮助更新原有的系统。
 *
 * 前面演练过了,适配器还是需要继承原对象来实现,但是我们最开始学习面向对象编程时候
 * 如果对象开始要求启用过多的子类,那么相应的代码就会牺牲编程人员的理解力和可维护性
 * 通常,我们会竭力保证用于一个对象的父-子类关系不超过3个
 * 
 * 
 * ===================================== 
 * ** 应用场景 **
 *
 * 迭代新的应用需求
 * 
 * -------------------------------------
 * 
 * @version ${Id}$
 * @author Shaowei Pu <54268491@qq.com>
 */

代码语言:javascript
复制
<?php
// 现在你是一个农场饲养员,主要负责养猪方面工作

/**
 * 饲养类
 */
class feeding{

	/**
	 * [$mess_tin 饭盒]
	 * @var array
	 */
	public $mess_tin = [];

	/**
	 * [feed 喂食物]
	 * @author 		Shaowei Pu <pushaowei@sporte.cn>
	 * @CreateTime	2017-02-23T19:47:18+0800
	 * @param                               [type] $food [description]
	 * @return                              [type]       [description]
	 */
	public function feed( $food ){
		$this->mess_tin[] = $food;
	}
	/**
	 * [getHow 吃了哪些东西]
	 * @author 		Shaowei Pu <pushaowei@sporte.cn>
	 * @CreateTime	2017-02-23T19:51:41+0800
	 * @return                              [type] [description]
	 */
	public function getHow(){
		return $this->mess_tin;
	}
}

// 以前你通过这样的方式可以喂猪
$you = new feeding;

// 然后老板给了这些食物
$bread = [		
		'apple',
		'tangerine',
		'banana',
	];

foreach ($bread as $key => $value) {
	$you->feed($value);
}

// 看看吃了些啥
var_dump( $you->getHow() );
/* 
+----------------------------------------------------------------------
|array (size=3)
|  0 => string 'apple' (length=5)
|  1 => string 'tangerine' (length=9)
|  2 => string 'banana' (length=6)
+----------------------------------------------------------------------
*/

// 但是有天高级饲养说这喂的这些食物都是小写的 这不行,给猪必须要大写的
// 然后你看了下饲养类,听隔壁兄弟这个类不仅仅用在猪身上
// 也有养羊事业部,羊牛事业部,同样用的这个类
// 你不能瞎几把乱改
// 学了适配器的你马上想到了 使用【适配器模式】可以解决问题
// 但是立马老大就说了不准乱继承。一个父类最多继承 3 个子类
// 于是聪明的你想到了这样一个方法

/**
 * 养猪事业部专用
 */
class feddingDecorator{

	/**
	 * [$_feeding 基类容器]
	 * @var array
	 */
	private $_feeding = [];

	/**
	 * [__construct 基类入变量]
	 * @author 		Shaowei Pu <pushaowei@sporte.cn>
	 * @CreateTime	2017-02-23T20:00:58+0800
	 * @param                               feeding $feeding [description]
	 */
	public function __construct( feeding $feeding )
	{
		$this->_feeding = $feeding;
	}

	/**
	 * [expertFeed 高级食物转换器]
	 * @author 		Shaowei Pu <pushaowei@sporte.cn>
	 * @CreateTime	2017-02-23T20:04:42+0800
	 * @return                              [type] [description]
	 */
	public function expertFeed()
	{
		array_walk($this->_feeding->mess_tin, function( &$value ){
			$value = strtoupper( $value );
		});
	}
}

// 然后这样,前期您还是放心喂

$me = new feeding;
foreach ($bread as $key => $value) {
	$me->feed($value);
}

// 然后你喂完了就开始用的养猪专业部使用的高科技了
$stm = new feddingDecorator( $me );
$stm->expertFeed();
// 看看吃了啥
var_dump($me-> getHow());

/* 
+----------------------------------------------------------------------
|array (size=3)
| 0 => string 'APPLE' (length=5)
| 1 => string 'TANGERINE' (length=9)
| 2 => string 'BANANA' (length=6)
+----------------------------------------------------------------------
*/

// 掌声经久不息
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-02-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档