decorator php,PHP设计模式- Decorator 装饰器模式

整理一下自己的学习Aaron Saray 写的PHP设计模式一些demo和自己的理解。大佬看完如果发现鄙人理解有误请立即指出,感谢拍砖,跪求鞭打

/**

* Decorator 装饰器模式

* -------------------------------------

* ** 来自说明 **

*

* 如果已有对象的部分内容或功能性发生改变,但是不需要修改原始的结构

*

* 刚开始楼主觉得这个他么怎么这么像 【 适配器模式 】

* 然后又把适配器模式的理论复制了过来给各位观众老爷看

*

* |-> 适配器模式: * 通过适配器模式能够使用新的代码和功能性来帮助更新原有的系统。

*

* 前面演练过了,适配器还是需要继承原对象来实现,但是我们最开始学习面向对象编程时候

* 如果对象开始要求启用过多的子类,那么相应的代码就会牺牲编程人员的理解力和可维护性

* 通常,我们会竭力保证用于一个对象的父-子类关系不超过3个

*

*

* =====================================

* ** 应用场景 **

*

* 迭代新的应用需求

*

* -------------------------------------

*

* @version ${Id}$

* @author Shaowei Pu <54268491@qq.com>

*/

// 现在你是一个农场饲养员,主要负责养猪方面工作

/**

* 饲养类

*/

class feeding{

/**

* [$mess_tin 饭盒]

* @var array

*/

public $mess_tin = [];

/**

* [feed 喂食物]

* @author Shaowei Pu

* @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

* @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

* @CreateTime 2017-02-23T20:00:58+0800

* @param feeding $feeding [description]

*/

public function __construct( feeding $feeding )

{

$this->_feeding = $feeding;

}

/**

* [expertFeed 高级食物转换器]

* @author Shaowei Pu

* @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)

+----------------------------------------------------------------------

*/

// 掌声经久不息

本项目是一个基于SSM(Spring+SpringMVC+MyBatis)后端框架与Vue.js前端框架开发的疫情居家办公系统。该系统旨在为居家办公的员工提供一个高效、便捷的工作环境,同时帮助企业更好地管理远程工作流程。项目包含了完整的数据库设计、前后端代码实现以及详细的文档说明,非常适合计算机相关专业的毕设学生和需要进行项目实战练习的Java学习者。 系统的核心功能包括用户管理、任务分配、进度跟踪、文件共享和在线沟通等。用户管理模块允许管理员创建和管理用户账户,分配不同的权限。任务分配模块使项目经理能够轻松地分配任务给团队成员,并设置截止日期。进度跟踪模块允许员工实时更新他们的工作状态,确保项目按计划进行。文件共享模块提供了一个安全的平台,让团队成员可以共享和协作处理文档。在线沟通模块则支持即时消息和视频会议,以增强团队之间的沟通效率。 技术栈方面,后端采用了Spring框架来管理业务逻辑,SpringMVC用于构建Web应用程序,MyBatis作为ORM框架简化数据库操作。前端则使用Vue.js来实现动态用户界面,搭配Vue Router进行页面导航,以及Vuex进行状态管理。数据库选用MySQL,确保数据的安全性和可靠性。 该项目不仅提供了一个完整的技术实现示例,还为开发者留下了扩展和改进的空间,可以根据实际需求添加新功能或优化现有功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值