【设计模式】装饰者模式

装饰者模式

角色和buff进行解释

步骤

  1. 角色和Buff共有一个Component,理解为有同一个操作,给予Buff里面可以填充角色。
  2. 角色有一个基类,Buff有一个基类,因为有多种Buff

理解

不是常规理解上的给角色填装Buff,角色作为主体,而是把角色放进Buff里,这里要做区分。

代码

csharp 复制代码
public class Role : Component
{
    public override void Opration()
    {
        Debug.LogError("我是某个角色");
    }
}

public class Buff : Component
{
    private Component role;

    public void SetComponent(Component component)
    {
        role = component;
    }

    public override void Opration()
    {
        if (role != null)
        {
            role.Opration();
        }
    }
}

public class ZengShang : Buff
{
    public override void Opration()
    {
        base.Opration();
        Debug.LogError("增加了伤害");
    }
}

public class JianShang : Buff
{
    public override void Opration()
    {
        base.Opration();
        Debug.LogError("减少了伤害");
    }
}


//调用

   Role role = new Role();
   ZengShang zengShang = new ZengShang();
   JianShang jianShang = new JianShang();

   zengShang.SetComponent(role);
   jianShang.SetComponent(zengShang);
   jianShang.Opration();
相关推荐
stm 学习ing1 小时前
FPGA 第7讲 简单组合逻辑译码器
stm32·嵌入式硬件·学习·fpga开发·c#·学习方法·fpga
GISer_Jing1 小时前
Javascript_设计模式(二)
javascript·设计模式·ecmascript
chyun20111 小时前
基于YOLO实现滑块验证码破解
python·c#
DyingLive3 小时前
设计模式-Facade(门面模式)GO语言版本
设计模式·外观模式
jjjxxxhhh1233 小时前
c++设计模式之适配器模式
c++·设计模式·适配器模式
jjjxxxhhh1234 小时前
c++设计模式之策略模式
c++·设计模式·策略模式
qtvb19874 小时前
c# 在10万条数据中判断是否存在很慢问题
开发语言·windows·c#
eggcode5 小时前
【Revit二次开发】创建Ribbon选项卡与带图标的按钮
c#·revit
捕鲸叉13 小时前
怎样在软件设计中选择使用GOF设计模式
c++·设计模式
啊松同学13 小时前
【Java】设计模式——工厂模式
java·后端·设计模式