zoukankan      html  css  js  c++  java
  • 自己看着视频的理解:设计模式之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模式的流程,路过的人如有看到不妥之处,麻烦指证,不圣感激!

  • 相关阅读:
    Cufon css3@font-face
    HTML5 Canvas
    HTML5 Canvas 的宽高
    :nth-child()
    new Image()
    ios有些机型input和fixed导致的页面错位问题
    使用performance进行前端性能监控
    throttle(节流)和debounce(防抖)
    object-fit/object-position
    flex布局与ellipsis冲突问题
  • 原文地址:https://www.cnblogs.com/lbg280/p/1307719.html
Copyright © 2011-2022 走看看