我有一个基础班,

class Msg
{
   public:

     ParseMsg()
     {
         ParseMsgData();
         ParseTrailer();
     }
     virtual void ParseMsgData() = 0;
     ParseTrailer();

};


和派生类

class InitiateMsg : public Msg
{
    public:
    void ParseMsgData() { ... }
};


class ReadOperationMsg  public Msg
{
   public:
    void ParseMsgData() { ... }
};


class WriteOperationMsg  public Msg
{
   public:

    void ParseMsgData() { ... }
};


情况如下

    void UsageFunction(string data)
    {
      Msg* msg = ParseHeader(data);
      ParseMsg
    }

   Msg* ParseHeader(string data)
   {

        Msg *msg = NULL;
           ....
         switch()
         {

            case 1:

                 msg = new InitiateMsg();
                 break;
            case 2:
                 msg = new ReadOperationMsg{();
                 break;
             case 3:
                 msg = new WriteOperationMsg{();
                 break;
               ....

         }

          return msg;
    }


基于数据的ParseHeader方法将决定必须创建哪个对象,因此我在使用的类之外​​实现了ParseHeader函数。如何在Msg类中创建ParseHeader函数,然后使用它?

在C#中,可以通过在类中将ParseHeader方法定义为static并从外部使用它来实现相同的目的,

最佳答案

您需要Abstract Factory设计模式。它是针对像您这样的场景定制的。
内联链接通过一个简单的示例比我在这里可以更详细地解释。

08-05 04:50