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

  • 相关阅读:
    总结7.19 laravel验证码
    java学习day74--Redis常用命令
    java学习day74--JT项目12(Redis缓存/spring boot整合redis)
    java学习day73-JT项目11(数据库高可用/读写分离/负载均衡)
    疯狂学java的第27天
    xtrabackup全备+binlog模拟slave恢复到某一时间点-启用GTID
    读写文件
    goroutine、chan、select、互斥、读写互斥
    接口

  • 原文地址:https://www.cnblogs.com/lbg280/p/1307719.html
Copyright © 2020-2023  润新知