Unity装饰器设计模式

装饰器设计模式(Decorator Pattern)是一种**在不修改原有类代码的前提下,给对象"动态增加功能"的结构型设计模式。

你可以把它理解成:给对象穿衣服 ------人不变,但穿得越多,功能越多。
他是一种在不修改原有类、不通过继承爆炸的前提下,给对象动态叠加功能 的结构型设计模式。它强调的是 "组合优于继承" ------功能是层层包裹,而不是写死在类里。

1.基础代码

这里方便展示直接放到一个脚本里面了,重点是MessageDecorator 这个类,他起到了承上启下的作用,让继承了装饰者基类的类可以获取到上一个消息数据并且提供抽象方法让后面的装饰者可以继续添加功能。

它起到的是:

  • 向上:保存并调用"上一个消息"

  • 向下:为所有装饰器提供统一扩展入口。

cs 复制代码
using UnityEngine;

// 攻击消息接口
public interface IMessage
{
    string GetMessage();
}

// 基础消息类
public class SimpleMessage : IMessage
{
    public string GetMessage()
    {
        return "攻击";
    }
}

// 装饰器基类
public abstract class MessageDecorator : IMessage
{
    //持有上一条信息的引用
    protected IMessage decoratedMessage;

    protected MessageDecorator(IMessage message)
    {
        decoratedMessage = message;
    }

    public abstract string GetMessage();
}

// 具体装饰器:特效装饰器
public class EffectDecorator : MessageDecorator
{
    //使用父类构造函数
    public EffectDecorator(IMessage message) : base(message) { }

    public override string GetMessage()
    {
        //获取上一条消息并添加效果
        return decoratedMessage.GetMessage() + "+特效";
    }
}

// 具体装饰器:音效装饰器
public class SoundDecorator : MessageDecorator
{
    public SoundDecorator(IMessage message) : base(message) { }

    public override string GetMessage()
    {
        //获取上一条消息并添加效果
        return decoratedMessage.GetMessage() + "+音效";
    }
}

2.使用

cs 复制代码
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TextPlayer : MonoBehaviour
{
    void Start()
    {
        IMessage msg = new SimpleMessage();
        msg = new EffectDecorator(msg);
        msg = new SoundDecorator(msg);

        Debug.Log(msg.GetMessage());
    }
}

3.运行

4.添加新的装饰器

5.运行

总结:

装饰器模式的核心思想是"组合而非继承",它通过一层层包装对象,在不破坏原有逻辑的前提下动态叠加功能。

在游戏开发中,这种模式非常适合处理攻击效果、伤害信息、特效与音效叠加等需要灵活组合的场景,既能降低耦合,又能让系统在后期扩展时保持清晰和可维护。

相关推荐
郝学胜-神的一滴4 小时前
中级OpenGL教程 013:渲染器类架构设计与逐帧渲染流程详解
开发语言·c++·unity·游戏引擎·图形渲染·opengl·unreal
饼干哥哥5 小时前
用Claude Code跑通跨境电商的5大场景,顶10个人的团队
人工智能·设计模式·正则表达式
折哥的程序人生 · 物流技术专研6 小时前
第3篇:手写促销策略引擎(满减、打折、立减)
java·设计模式·策略模式·开闭原则·编程实战·扩充系列·促销引擎
折哥的程序人生 · 物流技术专研8 小时前
第3篇:手写一个饮品制作模板(附代码)
java·设计模式·行为型模式·模版方法模式·钩子方法·代码复用·编程实战
ttod_qzstudio9 小时前
【软考设计模式】单例模式:唯一实例的管控与线程安全精讲
单例模式·设计模式
折哥的程序人生 · 物流技术专研10 小时前
第4篇:模板方法 vs 策略模式,面试怎么选?
java·设计模式·策略模式·行为型模式·模版方法模式·扩充系列·继承v组合
小园子的小菜10 小时前
Java设计模式精讲:创建型+结构型模式(含生产级案例+相似模式对比)
学习·设计模式
geovindu1 天前
java:Abstract Factory Pattern
java·开发语言·后端·设计模式·抽象工厂模式·创建型模式
geovindu1 天前
java: Factory Method Pattern
java·开发语言·后端·设计模式·工厂方法模式·创建型模式
折哥的程序人生 · 物流技术专研1 天前
第2篇:模板方法模式核心:好莱坞原则
设计模式·uml·模板方法模式·行为型模式·钩子方法·扩充系列·好莱坞原则