C# 使用MDI表单实现命令模式

C# 使用MDI表单实现命令模式,c#,command-pattern,C#,Command Pattern,我需要一些建议。我只是想了解一下设计模式。 我试过寻找和阅读,但我觉得迷路了。 我真的希望你能给我一个建议 在这里,我尝试附加一些图片和我的代码: 接口 public interface ICommand { void Execute(); } public interface IDataManipulation { void Append(); void Modify(); void Remove(); } public interface I

我需要一些建议。我只是想了解一下设计模式。 我试过寻找和阅读,但我觉得迷路了。 我真的希望你能给我一个建议

在这里,我尝试附加一些图片和我的代码:

  • 接口

     public interface ICommand {
        void Execute();
     }
    
     public interface IDataManipulation {
        void Append();
        void Modify();
        void Remove();
     }
    
     public interface IDataReload {
        void Reload();
     }
    
  • 合成对象

    public class CommandDataManipulation : ICommand {
        private IDataManipulation __receiver;
        private DataManipulations __action;
    
        public CommandDataManipulation(IDataManipulation receiver, DataManipulations action) {
            __receiver = receiver ;
            __action = action;
        }
    
        public void Execute() {
            if (__receiver == null) return;
            if (__action == DataManipulations.Append) __receiver.Append();
            if (__action == DataManipulations.Modify) __receiver.Modify();
            if (__action == DataManipulations.Remove) __receiver.Remove();
        }
    }
    
    public class CommandDataReload : ICommand {
        private IDataReload     __receiver;
    
        public CommandDataReload(IDataReload receiver) {
            __receiver = receiver ;
        }
    
        public void Execute() {
            if (__receiver == null) return;
            __receiver.Reload();
        }
    }
    
  • 调用者

     public class InvokeDataCommand {
    
        private static InvokeDataCommand __instance;
        private ICommand __command;
    
        private InvokeDataCommand() {
             __instance = null;
         }
    
        public static InvokeDataCommand Instance() {
            if (__instance == null) {
                __instance = new InvokeDataCommand();
            }
    
            return __instance;
        }
    
        public void SetCommand(ICommand command) {
            __command = command;
        }
    
        public void ExecuteCommand() {
            __command.Execute();
        }
     }
    
  • 接受者

    public partial class Display : Form, IDataManipulation, IDataReload { 
      ...
    }
    
  • 我觉得除了使用命令外,我还使用了单例

    我现在所做的是正确的吗

    public partial class Display : Form, IDataManipulation, IDataReload { 
      ...
    }