2
我想通過搜索Servicer類字符串中的字符/字符串來演示責任鏈模式的使用。代碼運行但Servicer1 ServiceReq未調用Servicer2 ServiceReq。如果我用「g」運行這個,我只會得到「Checked Servicer1」,但我應該得到「Checked Servicer1」「」在Servicer 2中找到請求「。Chain of Responsibility- Servicer1 not calling Servicer2
MainApp.cs
namespace ChainOfResponsibility
{
abstract class Servicer
{
protected Servicer successor;
public void SetSuccessor(Servicer s)
{
successor = s;
}
public abstract string ServiceReq(char request);
}
class Servicer1 : Servicer
{
public override string ServiceReq(char request)
{
string s1 = "Sam ate nuts";
if (s1.Contains(request))
{
return "Request found in Servicer 1";
}
else if (successor != null)
{
successor.ServiceReq(request);
}
return "Checked Servicer1'";
}
}
class Servicer2 : Servicer
{
public override string ServiceReq(char request)
{
string s2 = "Apples are great";
if (s2.Contains(request))
{
return "Request found in Servicer 2";
}
else if (successor != null)
{
successor.ServiceReq(request);
}
return "Checked Servicer 2";
}
}
表格代號:
namespace ChainOfResponsibility
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
char request = System.Convert.ToChar(textBox1.Text);
Servicer h1 = new Servicer1();
Servicer h2 = new Servicer2();
h1.SetSuccessor(h2);
AddToList(h1.ServiceReq(request));
}
private void AddToList(string message)
{
listBox1.Items.Add(message);
listBox1.Items.Add("----------------------------------------");
if (listBox1.Items.Count > 0)
listBox1.TopIndex = listBox1.Items.Count - 1;
}
}
}
請發佈您已經嘗試過的和您的預期結果 – RyanR
您通過表單提供的輸入是什麼?此外,您的預期輸出永遠不會發生;你可以調用'successor.ServiceReq',但是不要對返回值做任何事情。 –
您可以調用'successor.ServiceReq(request);'但是不返回任何值。 –