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. 系统性能会受到影响。
  • 相关阅读:
    1维FDTD仿真
    A Personal Selection of Books on E lectromagnetics and Computational E lectromagnetics---David B. Davidson
    怎么学习计算电磁学【QUORA】
    Legendre polynomials
    获取控件的宽和高
    Fragments (官方文档中文版)
    ViewTreeObserver简介
    第一个Cocos2d-x Lua游戏
    搭建Cocos Code IDE开发环境
    Cocos2d-js中Chipmunk引擎
  • 原文地址:https://www.cnblogs.com/Fflyqaq/p/11736548.html
Copyright © 2011-2022 走看看