public interface IMessageSender
{
bool Connect(IPAddress ip, int port);
bool SendMessage(Message msg);
void SignOut();
}
public delegate void MessageReceivedEventHandler(string msg);
public delegate void ClientConnectedEventHandler(IPEndPoint ep);
public delegate void ConnectionLostEventHandler(string info);
public interface IMessageReceiver
{
event MessageReceivedEventHandler MessageReceived;
event ConnectionLostEventHandler ClientLost;
event ClientConnectedEventHandler ClientConnected;
void StartListen();
void StopListen();
}
事件委派實現觀察者模式,被動操作(收到訊息、用戶連線/斷線)自動通知 UI。
public class Talker
{
private IMessageReceiver receiver;
private IMessageSender sender;
public Talker(IMessageReceiver receiver, IMessageSender sender)
{
this.receiver = receiver; this.sender = sender;
}
}
C# 無多重繼承,採組合模式讓 Talker 同時具備收發能力,符合面向介面程式設計原則。