C#--设计模式(责任链模式)

最近在看HeadFirst中的设计模式,看到一个案例:一个公司生成了产品,有很多人发送了很多邮件给前台(Reception),其中邮件大概分为来自粉丝的,投诉的,想合作的,已经一些垃圾文件。如何把邮件分发给相应的部门。业务部门(Servise)需要业务邮件,法律部门(Law)需要控诉抱怨邮件,CEO(CEO)看到粉丝的邮件。这里前台控制一个链式关系,Servise–>Law–>CEO。
同时责任链模式也可运用到关卡的加载,文件过滤等。
C#--设计模式(责任链模式)_第1张图片
C#--设计模式(责任链模式)_第2张图片
实现:

public abstract class MailClassify
{
     
    protected MailClassify NextHandler;
    public void SetNext(MailClassify next)
    {
     
        this.NextHandler = next;
    }
    //具体处理的方式
    public abstract void Handle(TstDuty type);
}
using UnityEngine;

public class CEOHandler : MailClassify
{
     
    public override void Handle(TstDuty type)
    {
     
        if (type == TstDuty.Fan)
        {
     
            Debug.Log("CEO处理粉丝邮件");
        }
        else
        {
     
            NextHandler.Handle(type);
        }
    }
}
using UnityEngine;
public class LawDepartment : MailClassify
{
     
    public override void Handle(TstDuty type)
    {
     

        if (type == TstDuty.Complain)
        {
     
            Debug.Log("法务部门处理投诉邮件");
        }
        else
        {
     
            NextHandler.Handle(type);
        }
    }
}
using UnityEngine;

public class ServiseDepartment : MailClassify {
     

    public override void Handle(TstDuty type)
    {
     
        if (type == TstDuty.Business)
        {
     
            Debug.Log("业务部门处理业务邮件");
        }
        else
        {
     
            NextHandler.Handle(type);
        }
    }
}
public class Reception {
     

    public MailClassify Set()
    {
     
        MailClassify servise = new ServiseDepartment();
        MailClassify law = new LawDepartment();
        MailClassify ceo = new CEOHandler();
        servise.SetNext(law);
        law.SetNext(ceo);
        return servise;
    }
}
using UnityEngine;

public class TestClassify : MonoBehaviour {
     
    private MailClassify temp;
	// Use this for initialization
	void Start () {
     
        Reception reception = new Reception();
        temp=reception.Set();
        temp.Handle(TstDuty.Complain);
	}
}
public enum TstDuty  {
     
    None,
    Fan,
    Complain,
    Business,
	Rubbish
}

缺点:
我懒得写,有一类垃圾邮件没有做任何处理。在具体实现过程,可能到了链底也无法解决问题

你可能感兴趣的:(设计模式)