Chain Of Responsibility 避免把一个请求的发送者和请求者的接收者进行耦合,这个模式要求多个对象都有机会处理这个请求

 客户代码
客户代码1
 Console.WriteLine( root.Responsible.Name );
            Console.WriteLine( root.Responsible.Name );2
 Console.WriteLine( leafoneleft.Responsible.Name );
            Console.WriteLine( leafoneleft.Responsible.Name );3
 Console.WriteLine( leafoneright.Responsible.Name );
            Console.WriteLine( leafoneright.Responsible.Name );4
 Console.WriteLine( leaftwoleft.Responsible.Name );
            Console.WriteLine( leaftwoleft.Responsible.Name );5
 Console.WriteLine( leaftworight.Responsible.Name );
            Console.WriteLine( leaftworight.Responsible.Name );6
 Console.ReadLine();
            Console.ReadLine();
 MachineComponent
MachineComponent1
 using System;
using System;2

3
 namespace Gof.Test.ChaninOfResponsibility
namespace Gof.Test.ChaninOfResponsibility4


 {
{5
 public abstract class MachineComponent
    public abstract class MachineComponent6

 
     {
{7
 public MachineComponent(MachineComponent parent)
        public MachineComponent(MachineComponent parent)8

 
         {
{9
 _parent = parent;
            _parent = parent;            10
 }
        }11
 public MachineComponent(MachineComponent parent,Engineer responsible):this(parent)
        public MachineComponent(MachineComponent parent,Engineer responsible):this(parent)12

 
         {
{13
 _responsible = responsible;
            _responsible = responsible;14
 }
        }15
 public virtual MachineComponent Parent
        public virtual MachineComponent Parent16

 
         {
{17
 get
            get18

 
             {
{19
 return _parent;
                return _parent;20
 }
            }21
 }private MachineComponent _parent;
        }private MachineComponent _parent;22
 public virtual Engineer Responsible
        public virtual Engineer Responsible23

 
         {
{24
 get
            get25

 
             {
{26
 if( _responsible != null)
                if( _responsible != null)27

 
                 {
{28
 return _responsible;
                    return _responsible;29
 }
                }30
 return Parent.Responsible;
                return Parent.Responsible;31
 }
            } 32
 }private Engineer _responsible;
        }private Engineer _responsible;33
 }
    }34
 }
}
 MachineComposite
MachineComposite1
 using System;
using System;2

3
 namespace Gof.Test.ChaninOfResponsibility
namespace Gof.Test.ChaninOfResponsibility4


 {
{5
 public class MachineComposite:MachineComponent
    public class MachineComposite:MachineComponent6

 
     {
{7
 public MachineComposite(MachineComponent parent):base(parent)
        public MachineComposite(MachineComponent parent):base(parent)8

 
         {}
{}9
 public MachineComposite(MachineComponent parent,Engineer responsible):base(parent,responsible)
        public MachineComposite(MachineComponent parent,Engineer responsible):base(parent,responsible)10

 
         {}
{}11
 }
    }12
 }
}
 Machine
Machine1
 using System;
using System;2

3
 namespace Gof.Test.ChaninOfResponsibility
namespace Gof.Test.ChaninOfResponsibility4


 {
{5
 public class Machine:MachineComponent
    public class Machine:MachineComponent6

 
     {
{7
 public Machine(MachineComponent parent):base(parent)
        public Machine(MachineComponent parent):base(parent)8

 
         { }
{ }9
 public Machine(MachineComponent parent,Engineer responsible):base(parent,responsible)
        public Machine(MachineComponent parent,Engineer responsible):base(parent,responsible)10

 
         { }
{ }11
 }
    }12
 }
}
 MachineRoot
MachineRoot1
 using System;
using System;2

3
 namespace Gof.Test.ChaninOfResponsibility
namespace Gof.Test.ChaninOfResponsibility4


 {
{5
 public class MachineRoot:MachineComposite
    public class MachineRoot:MachineComposite6

 
     {
{7
 public MachineRoot(Engineer responsible):base(null,responsible)
        public MachineRoot(Engineer responsible):base(null,responsible)8

 
         {
{9
 }
        }10
 public override MachineComponent Parent
        public override MachineComponent Parent11

 
         {
{12
 get
            get13

 
             {
{14
 throw new Exception("根节点没有上一级");
                throw new Exception("根节点没有上一级");15
 }
            }16
 }
        }17

18
 }
    }19
 }
}
 Engineer
Engineer1
 using System;
using System;2

3
 namespace Gof.Test.ChaninOfResponsibility
namespace Gof.Test.ChaninOfResponsibility4


 {
{5
 public class Engineer
    public class Engineer6

 
     {
{7
 public Engineer(string name)
        public Engineer(string name)8

 
         {
{9
 _name = name;
            _name = name;10
 }
        }11
 public string Name
        public string Name12

 
         {
{13
 get
            get14

 
             {
{15
 return _name;
                return _name;16
 }
            }17
 set
            set18

 
             {
{19
 _name = value;
                _name = value;20
 }
            }21
 }private string _name = string.Empty;
        }private string _name = string.Empty; 22
 }
    }23
 }
}.jpg) 
  
 
                    
                
 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号