如何最正确地使用接口?

时间:2017-11-15 22:05:21

标签: c# .net

此代码作为模式是否正确?哪种方式更好,像这样或通过父类消息。

或者仅使用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");

            }
        }
    }

2 个答案:

答案 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");

        }
    }
}