面向对象之装饰模式

MengDe5个月前PHP516

目前有一个问题:新增了一个用户,但是我们要给他带上VIP的标识,带上用户组的标识,以后会添加更多的标识,在不违反开闭原则的情况下,我们该如何来实现呢?

上代码:

<?php
/**
 * Created by MengDe.
 * @Author MengDe <9258405@qq.com>
 * @Date   2021/8/24 11:11
 *
 */
//装饰者模式
//定义一个文章类

class  people
{
    protected $people;
    protected $peoples;

    public function __construct($people)
    {
        $this->people = $people;
        $this->peoples = $people;
    }

    public function result()
    {
        return $this->peoples;
    }

}

//我们给他增加一个VIP标识
class vipPeople extends people
{
    public function __construct($people)
    {
        $this->people = $people;
        $this->result();
    }

    public function result()
    {
        return $this->peoples = $this->people->result() . "是VIP "; // TODO: Change the autogenerated stub
    }

}

//用户组标识
class groupPeople extends people
{
    public function __construct($people)
    {
        $this->people = $people;
        $this->result();
    }

    public function result()
    {
        return $this->peoples = $this->people->result() . "是管理员 "; // TODO: Change the autogenerated stub
    }

}

//调用
//先VIP再管理员
$people = (new groupPeople(new vipPeople(new people("张三"))))->result();
//先管理员再VIP
$people = (new vipPeople(new groupPeople(new people("张三"))))->result();

我们来讲一下实现的原理:

首先:我们给子类传入一个父类对象 里面包含了人和要未装饰的人,

我们在子类里面 我们把父类的对象看做成一个人(有people属性和result方法),子类里面获取到父类整个对象 赋值给自己(包含people 和result),然后重新的定义了结果方法 进行装饰,在结果方法中 把自己的peoples属性从父级获取到的结果进行变更 从而达到了装饰的效果

可能讲得不是很清楚,可以联系我互相讨论

返回列表

上一篇:面向对象之适配器模式

没有最新的文章了...

相关文章

Fastadmin安装过程中遇到的问题-Bower

Fastadmin安装过程中遇到的问题-Bower

因项目需求,所以需要使用fastadmin框架,首次安装,服务器上面缺少了Bower,但是安装的过程中遇到一些问题。git 我就不必说了,在第三步的时候需要安装Bower 我刚开始以为是直接使用yum...

PHP魔术方法简介

<?php namespace Nphp; class Object {     //1.__get/__se...

PHP面向对象之单例模式

何为单例模式,他的使用场景?他有哪些特点?让我来告诉你。如何实现一个单例模式的类,只需要四步:1.禁止外部new操作2.给外部开放获取方法3.禁止子类继承修改构造函数4.禁止克隆如何实现:<?p...

PHP面向对象详解

1-1面向对象简介项目代码应该有单个能够起子程序作用的对象组成目标:重用性灵活性扩展性1-2类(Class)与对象(Obj)类生成对象使用new 关键字来生成对象类里面有属性和方法:属性:public...

PHP面向对象之工厂模式

PHP面向对象之工厂模式

什么是面向对象的工厂模式,他到底有什么好处?今天从一个例子带你来体验一下。废话不多说:直接展示代码(大佬勿喷,狗头保命)<?php /**  * @author ...

PHP快速将文档转成PDF并获取页数

去年有个功能是实现html转成pdf,这个功能解决办法在:    PHP利用wkhtmltopdf操作今年是打印小程序,用户问别人都能做到?你们怎么做不到?那不...