zoukankan      html  css  js  c++  java
  • Unity---游戏设计模式(14)之责任链模式




    概述参考请看 参考博客

    1、责任链模式原型

    模式原型代码

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Client : MonoBehaviour
    {
        private void Start () {
            char problem = 'C';
    
            IResponseHandler handlerA = new ResponseHandlerA();
            IResponseHandler handlerB = new ResponseHandlerB();
            IResponseHandler handlerC = new ResponseHandlerC();
    
            //设置责任链
            handlerA.SetNextHandler(handlerB).SetNextHandler(handlerC);
            handlerA.Handle(problem);
    	}
    }
    
    /// <summary>
    /// 抽象责任链类
    /// </summary>
    public abstract class IResponseHandler
    {
        protected IResponseHandler mNextHandler;
        public IResponseHandler NextHandler { get { return mNextHandler; } }
    
        public abstract void Handle(char problem);
    
        public IResponseHandler SetNextHandler(IResponseHandler handler)
        {
            mNextHandler = handler;
            return mNextHandler;
        }
    }
    
    public class ResponseHandlerA : IResponseHandler
    {
        public override void Handle(char problem)
        {
            if (problem == 'A')
            {
                Debug.Log("HandlerA处理了A问题");
            }
            else
            {
                if (mNextHandler != null)
                {
                    mNextHandler.Handle(problem);
                }
            }
        }
    }
    public class ResponseHandlerB : IResponseHandler
    {
        public override void Handle(char problem)
        {
            if (problem == 'B')
            {
                Debug.Log("HandlerB处理了B问题");
            }
            else
            {
                if (mNextHandler != null)
                {
                    mNextHandler.Handle(problem);
                }
            }
        }
    }
    public class ResponseHandlerC : IResponseHandler
    {
        public override void Handle(char problem)
        {
            if (problem == 'C')
            {
                Debug.Log("HandlerC处理了C问题");
            }
            else
            {
                if (mNextHandler != null)
                {
                    mNextHandler.Handle(problem);
                }
            }
        }
    }
    

    2、责任链模式实例

    游戏中应用:关卡系统。

    3、责任链模式优缺点

    优点

    1. 降低耦合杜,实现发送者和请求者代码分离。

    缺点

    1. 请求不一定百分百被接收。
    2. 系统性能会受到影响。
  • 相关阅读:
    django实例(1)
    django笔记补充
    django笔记
    Docker自学纪实(六)搭建docker私有仓库
    Docker自学纪实(四)搭建LNMP部署wordpress
    Docker自学纪实(三)Docker容器数据持久化
    Docker自学纪实(二)Docker基本操作
    Docker自学纪实(一)Docker介绍
    CentOS 7.4 基于LNMP搭建wordpress
    CentOS7安装配置VSFTP
  • 原文地址:https://www.cnblogs.com/Fflyqaq/p/11736548.html
Copyright © 2011-2022 走看看