using System;
using System.Collections.Generic;
using System.Text;namespace 职责链模式
{
class Program
{
static void Main(string[] args)
{
Handler h1 = new ConcreteHandler1 ();
Handler h2 = new ConcreteHandler2();
Handler h3 = new ConcreteHandler3();
//ConcreteHandler1 h1 = new ConcreteHandler1();
//ConcreteHandler2 h2 = new ConcreteHandler2();
//ConcreteHandler3 h3 = new ConcreteHandler3(); h1.SetSuccessor(h2);
h2.SetSuccessor(h3); int[] requests = { 2, 5, 14, 22, 18, 3, 27, 20 }; foreach (int request in requests)
{
h1.HandleRequest(request);
} Console.Read(); }
} abstract class Handler
{
protected Handler successor; public void SetSuccessor(Handler successor)
{
this.successor = successor;
} public abstract void HandleRequest(int request);
} class ConcreteHandler1 : Handler
{
public override void HandleRequest(int request)
{
if (request >= 0 && request < 10)
{
Console.WriteLine("{0} 处理请求 {1}",
this.GetType().Name, request);
}
else if (successor != null)
{
successor.HandleRequest(request);
}
}
} class ConcreteHandler2 : Handler
{
public override void HandleRequest(int request)
{
if (request >= 10 && request < 20)
{
Console.WriteLine("{0} 处理请求 {1}",
this.GetType().Name, request);
}
else if (successor != null)
{
successor.HandleRequest(request);
}
}
} class ConcreteHandler3 : Handler
{
public override void HandleRequest(int request)
{
if (request >= 20 && request < 30)
{
Console.WriteLine("{0} 处理请求 {1}",
this.GetType().Name, request);
}
else if (successor != null)
{
successor.HandleRequest(request);
}
}
}}以下两种构造的结果是否完全相同,请详细介绍下(我才学 请讲的通俗些 多谢) Handler h1 = new ConcreteHandler1 ();
Handler h2 = new ConcreteHandler2();
Handler h3 = new ConcreteHandler3();
//ConcreteHandler1 h1 = new ConcreteHandler1();
//ConcreteHandler2 h2 = new ConcreteHandler2();
//ConcreteHandler3 h3 = new ConcreteHandler3();
using System.Collections.Generic;
using System.Text;namespace 职责链模式
{
class Program
{
static void Main(string[] args)
{
Handler h1 = new ConcreteHandler1 ();
Handler h2 = new ConcreteHandler2();
Handler h3 = new ConcreteHandler3();
//ConcreteHandler1 h1 = new ConcreteHandler1();
//ConcreteHandler2 h2 = new ConcreteHandler2();
//ConcreteHandler3 h3 = new ConcreteHandler3(); h1.SetSuccessor(h2);
h2.SetSuccessor(h3); int[] requests = { 2, 5, 14, 22, 18, 3, 27, 20 }; foreach (int request in requests)
{
h1.HandleRequest(request);
} Console.Read(); }
} abstract class Handler
{
protected Handler successor; public void SetSuccessor(Handler successor)
{
this.successor = successor;
} public abstract void HandleRequest(int request);
} class ConcreteHandler1 : Handler
{
public override void HandleRequest(int request)
{
if (request >= 0 && request < 10)
{
Console.WriteLine("{0} 处理请求 {1}",
this.GetType().Name, request);
}
else if (successor != null)
{
successor.HandleRequest(request);
}
}
} class ConcreteHandler2 : Handler
{
public override void HandleRequest(int request)
{
if (request >= 10 && request < 20)
{
Console.WriteLine("{0} 处理请求 {1}",
this.GetType().Name, request);
}
else if (successor != null)
{
successor.HandleRequest(request);
}
}
} class ConcreteHandler3 : Handler
{
public override void HandleRequest(int request)
{
if (request >= 20 && request < 30)
{
Console.WriteLine("{0} 处理请求 {1}",
this.GetType().Name, request);
}
else if (successor != null)
{
successor.HandleRequest(request);
}
}
}}以下两种构造的结果是否完全相同,请详细介绍下(我才学 请讲的通俗些 多谢) Handler h1 = new ConcreteHandler1 ();
Handler h2 = new ConcreteHandler2();
Handler h3 = new ConcreteHandler3();
//ConcreteHandler1 h1 = new ConcreteHandler1();
//ConcreteHandler2 h2 = new ConcreteHandler2();
//ConcreteHandler3 h3 = new ConcreteHandler3();
这只说明我们声明变量x的类型是A,或者说x可以引用一个A类对象。但是至于x实际引用的对象,可以是A类型的,也可以是A类型的子类的,这就是多态的表现。由于一个ConcreteHandler1实例就是Handler实例,所以编译器允许你声明左边的变量引用为Handler类型。
不论左边声明变量x为什么类型,它所指引的那个对象仍然是那匹马,而不是变了其它的东西。这于是也就根本不会导致提出你在题目中写的“兼容”问题!