设计模式 | 装饰模式

简介: 设计模式 | 装饰模式

说明

  • 定义

在不修改原有对象的基础上, 将功能附加到对象上。符合我们软件开发的开闭原则, 是一个非常经典的设计模式, 部分语言已经将装饰模式设计成了一种语法。

一般装饰器模式需要包涵几个个东西:

  • 操作接口约束
  • 操作具体实现类即被装饰对象
  • 装饰器约束
  • 装饰器实现

Laravel的中间件就是如此设计, 具体大家可以看看 源码, 这里不多赘述

  • 例如说:

我们常见到的一些美女拍照, 对吧, 照片不是一拍就那么好看的吧(当然, 有好看的麻烦介绍给博主)。拍出的照片需要装饰一下,而且这个装饰可能是在拍照前及拍照后,因为拍照前不得开美颜?拍完后不得p图??

如果我们单独写一个拍照的类, 那要增加这些东西是肯定需要修改代码的, 且不利于复用, 你看有些天生丽质的, 就不需要这么些乱七八糟, 只要拍照就行, 那为了我们的程序可扩展性更强, 我们这边使用装饰器模式来实现一下吧,  在做业务的时候也经常遇到这种情况, 所以小伙伴们要灵活运用哦。

示例

<?php
/**
 * Created by 憧憬.
 */
/**
 * 拍照接口
 * Interface Photograph
 */
interface PhotographInterface {
    public function take();
}
/**
 * 简单拍照实现
 * Class Photograph
 */
class Photograph implements PhotographInterface {
    /**
     * 正常拍照
     * @author: 憧憬
     */
    public function take() {
        echo '直接拍照,懂?';
    }
}
/**
 * 设计装饰器的约束 只要是继承抽象的都应该拥有一个拍照对象, 你要装饰也要约束, 装饰的哪个方法?所以直接实现拍照接口
 * Class Decorator
 */
abstract class Decorator implements PhotographInterface {
    public $photograph;
    public function __construct(PhotographInterface $photograph)
    {
        $this->photograph = $photograph;
    }
}
/**
 * 美颜滤镜装饰
 * Class LensDecorator
 */
class LensDecorator extends Decorator {
    /**
     * 直接添加美颜滤镜
     * @author: 憧憬
     */
    public function take()
    {
        echo '添加美颜滤镜啊';
        $this->photograph->take();
    }
}
/**
 * ps类
 * Class PsDecorator
 */
class PsDecorator extends Decorator {
    public function take()
    {
        // TODO: Implement take() method.
        $this->photograph->take();
        echo '拍完照ps一下';
    }
}
$photograph = new Photograph();
//$photograph->take(); // 直接拍照,懂?
// 拍照前添加美颜滤镜 如果还需要再美颜滤镜前做更多操作, 再实现一个装饰类, 然后把美颜滤镜这个实例放进去即可
$lensDecorator = new LensDecorator($photograph);
//$lensDecorator->take(); // 添加美颜滤镜啊  再直接拍照,懂?
// 拍完照ps一下
$psDecorator = new PsDecorator($lensDecorator);
$psDecorator->take(); // 添加美颜滤镜啊   直接拍照,懂?    拍完照ps一下

本文为作者原创,手码不易,允许转载,转载后请以链接形式说明文章出处。

目录
相关文章
|
8月前
|
设计模式 PHP
php设计模式--装饰模式(七)装饰模式完成文章编辑
php设计模式--装饰模式(七)装饰模式完成文章编辑
50 0
|
设计模式
设计模式系列教程(12) - 装饰模式
设计模式系列教程(12) - 装饰模式
45 0
|
设计模式 算法 uml
结构型设计模式01-装饰模式
结构型设计模式01-装饰模式
44 0
|
设计模式
设计模式13 - 装饰模式【Decorator Pattern】
设计模式13 - 装饰模式【Decorator Pattern】
35 0
|
5月前
|
设计模式 Java
【八】设计模式~~~结构型模式~~~装饰模式(Java)
文章详细介绍了装饰模式(Decorator Pattern),这是一种对象结构型模式,用于在不使用继承的情况下动态地给对象添加额外的职责。装饰模式通过关联机制,使用装饰器类来包装原有对象,并在运行时通过组合的方式扩展对象的行为。文章通过图形界面构件库的设计案例,展示了装饰模式的动机、定义、结构、优点、缺点以及适用场景,并提供了Java代码实现和应用示例。装饰模式提高了系统的灵活性和可扩展性,适用于需要动态、透明地扩展对象功能的情况。
【八】设计模式~~~结构型模式~~~装饰模式(Java)
|
7月前
|
设计模式
结构型设计模式之装饰模式
结构型设计模式之装饰模式
|
8月前
|
设计模式 JavaScript Java
[设计模式Java实现附plantuml源码~结构型] 扩展系统功能——装饰模式
[设计模式Java实现附plantuml源码~结构型] 扩展系统功能——装饰模式
|
8月前
|
设计模式 Go
[设计模式 Go实现] 结构型~装饰模式
[设计模式 Go实现] 结构型~装饰模式
|
设计模式
设计模式——装饰模式
设计模式——装饰模式
65 0
|
8月前
|
设计模式 Java
小谈设计模式(7)—装饰模式
小谈设计模式(7)—装饰模式