设计模式---责任链模式(DesignPattern_ChainofResponsibility)

简介: 摘录自:设计模式与游戏完美开发十年磨一剑,作者将设计模式理论巧妙地融入到实践中,以一个游戏的完整实现呈现设计模式的应用及经验的传承 《轩辕剑》之父——蔡明宏、资深游戏制作人——李佳泽、Product Evangelist at Unity T...

摘录自:设计模式与游戏完美开发

十年磨一剑,作者将设计模式理论巧妙地融入到实践中,以一个游戏的完整实现呈现设计模式的应用及经验的传承 《轩辕剑》之父——蔡明宏、资深游戏制作人——李佳泽、Product Evangelist at Unity Technologies——Kelvin Lo、信仁软件设计创办人—— 赖信仁、资深3D游戏美术——刘明恺 联合推荐全书采用了整合式的项目教学,即以一个游戏的范例来应用23种设计模式的实现贯穿全书,让读者学习到整个游戏开发的全过程和作者想要传承的经验,并以浅显易懂的比喻来解析难以理解的设计模式,让想深入了解此领域的读者更加容易上手。


工程GitHub

using UnityEngine;
using System.Collections;

namespace DesignPattern_ChainofResponsibility
{
    // 處理訊息的介面
    public abstract class Handler
    {
        protected Handler m_NextHandler = null;

        public Handler( Handler theNextHandler )
        {
            m_NextHandler = theNextHandler;
        }

        public virtual void HandleRequest(int Cost)
        {
            if(m_NextHandler!=null)
                m_NextHandler.HandleRequest(Cost);
        }
    }
    
    // 處理所負責的訊息1
    public class ConcreteHandler1 : Handler
    {
        private int m_CostCheck = 10;

        public ConcreteHandler1( Handler theNextHandler ) : base( theNextHandler )
        {}

        public override void HandleRequest(int Cost)
        {
            if( Cost <= m_CostCheck)
                Debug.Log("ConcreteHandler1.核準");
            else
                base.HandleRequest(Cost);
        }
    }

    // 處理所負責的訊息2
    public class ConcreteHandler2 : Handler
    {
        private int m_CostCheck = 20;
        
        public ConcreteHandler2( Handler theNextHandler ) : base( theNextHandler )
        {}
        
        public override void HandleRequest(int Cost)
        {
            if( Cost <= m_CostCheck)
                Debug.Log("ConcreteHandler2.核準");
            else
                base.HandleRequest(Cost);
        }
    }

    // 處理所負責的訊息3
    public class ConcreteHandler3 : Handler
    {           
        public ConcreteHandler3( Handler theNextHandler ) : base( theNextHandler )
        {}  
        public override void HandleRequest(int Cost)
        {
            Debug.Log("ConcreteHandler3.核準");
        }
    }

}

using UnityEngine;
using System.Collections;
using DesignPattern_ChainofResponsibility;

public class ChainofResponsibilityTest : MonoBehaviour {

    // Use this for initialization
    void Start () {
        UnitTest();
    }
    
    // 
    void UnitTest () {

        // 建立Cost驗証的連接方式
        ConcreteHandler3 theHandle3 = new ConcreteHandler3(null);
        ConcreteHandler2 theHandle2 = new ConcreteHandler2(theHandle3);
        ConcreteHandler1 theHandle1 = new ConcreteHandler1(theHandle2);

        // 確認
        theHandle1.HandleRequest(10);
        theHandle1.HandleRequest(15);
        theHandle1.HandleRequest(20);
        theHandle1.HandleRequest(30);
        theHandle1.HandleRequest(100);

    
    }
}

相关文章
|
1月前
|
设计模式 Java
【设计模式】责任链模式
【设计模式】责任链模式
|
3月前
|
设计模式
【设计模式】责任链模式
【1月更文挑战第27天】【设计模式】责任链模式
|
3月前
|
设计模式 Dubbo Java
聊聊Java设计模式-责任链模式
责任链模式(Chain Of Responsibility Design Pattern),也叫做职责链,是将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。
82 1
聊聊Java设计模式-责任链模式
|
6月前
|
设计模式 C++
设计模式之责任链模式(C++)
设计模式之责任链模式(C++)
|
3月前
|
设计模式
设计模式之责任链模式
设计模式之责任链模式
|
14天前
|
设计模式 PHP
php设计模式--责任链模式(五)
php设计模式--责任链模式(五)
12 0
|
2月前
|
设计模式 Java 测试技术
浅谈设计模式 - 责任链模式(十四)
浅谈设计模式 - 责任链模式(十四)
51 0
|
3月前
|
设计模式 SQL Java
设计模式-责任链模式
设计模式-责任链模式
49 0
|
3月前
|
设计模式 Go 开发工具
Golang设计模式——11责任链模式
Golang设计模式——11责任链模式
19 0
Golang设计模式——11责任链模式
|
3月前
|
设计模式 前端开发
【设计模式】之责任链模式
职责链模式是一种非常有用的设计模式,在前端开发中经常用于处理复杂的请求流程和数据验证。它通过将请求发送者和接收者解耦,并将请求沿着一个链条依次传递下去,实现了优雅地处理请求流程。通过使用职责链模式,我们可以提高代码的可维护性和可扩展性。然而,在应用职责链模式时需要权衡其带来的优缺点,并根据具体情况进行选择。
44 0