自己看着视频的理解:设计模式之abstractfactory模式(2)

抽象工厂模式的实现:
1.首先建立一个要生产产品的抽象工厂类,列出所要生产的抽象产品。(其产品都是设计时已经固定且都是互相依赖,不会改变的)


    abstract class DPFactory
    {
         //工厂要生产的产品
  abstract public DPDocument CreateDocument();
  abstract public DPView CreateView();
  abstract public DPWorkspace CreateWorkspace();
    }


2.根据第一点对抽象产品建立相应的产品抽象类(对抽象产品进行建立抽象类,是固定不定的,
  但其产品样式等属于动态,随时都会改变,在其具体实现的时候继成此抽象类来改变)

 abstract class DPDocument
 {
  abstract public void Dump();  
 }

 abstract class DPWorkspace
 {
  abstract public void Dump();
 }
 
 abstract class DPView
 {
  abstract public void Dump();
     }


3.客户程序根据业务逻辑进行构造产品,其都是依赖1、2的抽象类,并不依赖具体的实现!(实现稳定)

     abstract class DPApplication
 {
  protected DPDocument doc;
  protected DPWorkspace workspace;
  protected DPView view;
  //客户端的构造器,构造以factory的形式进行实现产品,具体的什么形式,根据传递过来的参数
  public void ConstructObjects(DPFactory factory)
  {
              //创建一系列产品,都是依赖抽象类,并不依赖具体实现
   workspace = factory.CreateWorkspace();
              doc = factory.CreateDocument();
   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();
  }
     }


4.建立完工厂框架后对对于上述的第一点,第二点进行一一实现:
 
  首先,生产产品的抽象工厂类(也就是第一点)的抽象产品进行具体实现!

 class MyFactory : DPFactory
 {
         override public DPWorkspace CreateWorkspace()
         {
              return new MyWorkspace();//实现具体的WorkSpase
         }

  override public DPDocument CreateDocument()
  {
   return new MyDocument();//实现具体的Document
  }
    
  override public DPView CreateView()
  {
   return new MyView();//实现具体的View
  }
     }


  然后,产品具体的实现(对于第二点)
 *****************************************************
 (1)实现WorkSpase方法
 class MyWorkspace : DPWorkspace
 {
  override public void Dump()
  {
   Console.WriteLine("MyWorkspace exists2");
  }
 }
 *****************************************************
 (2)实现Document的方法
  class MyDocument : DPDocument
 {
  override public void Dump()
  {
   Console.WriteLine("MyDocument exists1");
  }
 }
 *****************************************************
 (3)实现View的方法
 class MyView : DPView
 {
  override public void Dump()
  {
   Console.WriteLine("MyView exists3");
  }
 }

5.将抽象的客户程序(第三点),以重写,进行具体的实现:

 class MyApplication : DPApplication
 {
         //要实现的具体工厂
  MyFactory myFactory = new MyFactory();

  override public void Dump()
  {
   Console.WriteLine("MyApplication exists");
  }
  
  public void CreateFamily()
  {
   MyFactory myFactory = new MyFactory();
   ConstructObjects(myFactory);   
  }
     }

6.开始应用:调用具体实现工厂(第五点)的客户程序

 public class Client
     {
         public static int Main(string[] args)
         {
   //初始化客户程序
   MyApplication myApplication = new MyApplication();

   myApplication.CreateFamily();

   myApplication.DumpState();//父类里的方法
   
             return 0;
         }
     }
 

以上是本人理解abstractfactory模式的流程,路过的人如有看到不妥之处,麻烦指证,不圣感激!

原文地址:https://www.cnblogs.com/lbg280/p/1307719.html