Patterns in SOME –Abstract Factory

    技术2022-05-11  75

    Code in C#:   namespace AbstractFactory_DesignPattern {      using System;        // These classes could be part of a framework,      // which we will call DP      // ===========================================           abstract class DPDocument      {          abstract public void Dump();              }        abstract class DPWorkspace      {          abstract public void Dump();      }           abstract class DPView      {          abstract public void Dump();      }              abstract class DPFactory      {          abstract public DPDocument CreateDocument();          abstract public DPView CreateView();          abstract public DPWorkspace CreateWorkspace();      }        abstract class DPApplication      {          protected DPDocument doc;          protected DPWorkspace workspace;          protected DPView view;                   public void ConstructObjects(DPFactory factory)          {               // Create objects as needed               doc = factory.CreateDocument();               workspace = factory.CreateWorkspace();               view = factory.CreateView();          }                           abstract public void Dump();            public void DumpState()          {               if (doc != null) doc.Dump();               if (workspace != null) workspace.Dump();               if (view != null) view.Dump();          }      }        // These classes could be part of an application      class MyApplication : DPApplication      {          MyFactory myFactory = new MyFactory();            override public void Dump()          {               Console.WriteLine("MyApplication exists");          }            public void CreateFamily()          {               MyFactory myFactory = new MyFactory();               ConstructObjects(myFactory);                       }      }           class MyDocument : DPDocument      {          public MyDocument()          {               Console.WriteLine("in MyDocument constructor");                       }                   override public void Dump()          {               Console.WriteLine("MyDocument exists");          }      }        class MyWorkspace : DPWorkspace      {          override public void Dump()          {               Console.WriteLine("MyWorkspace exists");          }      }        class MyView : DPView      {          override public void Dump()          {               Console.WriteLine("MyView exists");          }      }        class MyFactory : DPFactory      {          override public DPDocument CreateDocument()          {               return new MyDocument();          }          override public DPWorkspace CreateWorkspace()          {               return new MyWorkspace();          }                 override public DPView CreateView()          {               return new MyView();          }      }        ///<summary>      ///    Summary description for Client.      ///</summary>      public class Client      {          public static int Main(string[] args)          {               MyApplication myApplication = new MyApplication();                 myApplication.CreateFamily();                 myApplication.DumpState();                             return 0;          }      } }   Code in SOME:    ADPDocument        a_Dump()   ADPWorkspace        a_Dump()   ADPView        a_Dump()   CMyDocument :ADPDocument        ()        o_Dump()   CMyWorkspace :ADPWorkspace        o_Dump()   CMyView : ADPView        o_Dump()   ADPFactory        ADPDocument a_CreateDocument()        ADPWorkspace a_CreateWorkspace()        ADPView a_CreateView()   CMyFactory :ADPFactory        ADPDocument o_CreateDocument()        ADPWorkspace o_CreateWorkspace()        ADPView o_CreateView()   ADPApplication ->ADPDocument[m_doc],->ADPWorkspace[m_workspace],->ADPView[m_view]             //referrence list, be deviden by comma        ConstructObjects(ADPFactory)        a_Dump()        DumpState()   CMyApplication :ADPApplication, ->CMyFactory[_myFactory.()]                   //ref list and inherit list, ".()" means it will be created in defination        o_Dump()        CreateFamily()   CClient        main   CClient.main {        CMyApplication myApplication.();        myApplication.CreateFamily()        {               CMyFactory myFactory.();               ConstructObjects<ADPApplication>(myFactory)                             //if this method belongs to one of its ancestors, should use "<AncestorName>"               {                      m_doc = myFactory.CreateDocument<CMyFactory>()                      {                             CMyDocument.();                      };                                              m_workspace = myFactory.CreateWorkspace<CMyFactory>()                      {                                 CMyWorkspace.();                      };                      m_view = myFactory.CreateView<CMyFactory>()                          {                             CMyView.();                      };               };        };        myApplication.DumpState()        {               m_doc.Dump();               m_workspace.Dump();               m_view.Dump();        }; }

    最新回复(0)