此代码作为模式是否正确?哪种方式更好,像这样或通过父类消息。
或者仅使用3个类和1个接口更好吗?在哪里输入类似的内容:
INotification Notify = new SystemMessage();
public interface INotification { void ShowNotification(String text); }
class Message : INotification
{
static internal Message CurrentMessageType { get; set; }
public virtual void ShowNotification(string text) {
if (CurrentMessageType == null) CurrentMessageType = new SystemMessage();
}
}
class SystemMessage : Message {
public override void ShowNotification(string text) {
Console.WriteLine("SYSTEM: " + text);
}
}
class ConsoleMessage : Message {
public override void ShowNotification(string text) {
Console.WriteLine("CONSOLE: " + text);
}
}
class NotifyMessage : Message {
public override void ShowNotification(string text) {
Console.WriteLine("NOTIFY: " + text);
}
}
class Program
{
static void Main(string[] args)
{
while(true)
{
Console.Write("MSG: ");
String rsp = Console.ReadLine();
switch (rsp)
{
case "sys":
Message.CurrentMessageType = new SystemMessage();
break;
case "con":
Message.CurrentMessageType = new ConsoleMessage();
break;
case "not":
Message.CurrentMessageType = new NotifyMessage();
break;
case "exit":
return;
}
Message.CurrentMessageType.ShowNotification("test message");
}
}
}
答案 0 :(得分:0)
我根本不明白为什么你需要这个界面INotification
。相反,你在这里有一个类层次结构或继承关系,在这种情况下有Message
因为你的抽象基类可能就足够了所有
public abstract class Message
{
static internal Message CurrentMessageType { get; set; }
public virtual void ShowNotification(string text) {
if (CurrentMessageType == null)
CurrentMessageType = new SystemMessage();
}
}
根据你的评论:我不是在争论什么更好但你应该遵循OOP概念我相信。因此,如果类之间存在某种关系,则应使用类层次结构。如果没有,那么使用接口将是好的,在这种情况下,你会说所有这些类提供类似的功能,可能有不同的实现,但它们可能不相关。
答案 1 :(得分:0)
我不明白你为什么需要很多课程,如果他们都做同样的事情呢?对于这样一个简单的情况,一个好的模式将是KISS:)
class Message
{
static internal string CurrentMessageType { get; set; } = "SYSTEM"
static void ShowNotification(string text) {
Console.WriteLine(CurrentMessageType + ": " + text);
}
}
class Program
{
static void Main(string[] args)
{
while(true)
{
Console.Write("MSG: ");
String rsp = Console.ReadLine();
switch (rsp)
{
case "sys":
Message.CurrentMessageType = "SYSTEM";
break;
case "con":
Message.CurrentMessageType = "CONSOLE";
break;
case "not":
Message.CurrentMessageType = "NOTIFY";
break;
case "exit":
return;
}
Message.ShowNotification("test message");
}
}
}