• asp.net—工厂模式


    一、什么是工厂模式

      定义:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类。

    二、怎么使用工厂模式

      首先模拟一个场景:有一个汽车工厂,  可以日本车、美国车、中国车。。。

      这个场景怎么用工厂模式表达出来呢?

      要生产汽车所以首先要有个汽车类

     //抽象一个汽车类
     public abstract class CarBreed
     {
         public string Name {get;set;}
     }
     
     public class JapanCar : CarBreed
     {
         public JapanCar(){
             Console.WriteLine("日本车");
         }
     }
      public class ChineseCar : CarBreed
     {
         public ChineseCar(){
             Console.WriteLine("中国车");
         }
     }
      public class USACar : CarBreed
     {
         public USACar(){
             Console.WriteLine("美国车");
         }
     }

    首先用简单工厂模式:(缺点:工厂类集中了所有产品创建逻辑,不利于扩展)

      //汽车工厂(简单工厂)
     public class CarFactory
     {
         public static CarBreed getCarBreed(string car)
         {
             switch(car)
             {
                 case "JapanCar":return new JapanCar();
                 case "ChineseCar":return new ChineseCar();
                 case "USACar":return new USACar();
             }
         }
     }
      //程序入口
     public class Program
     {
         public static void Main(string[] args)
         {
             // 日本车
             CarBreed mycar = CarFactory.getCarBreed("JapanCar");
             //中国车
             mycar = CarFactory.getCarBreed("ChineseCar");
             //美国车
             mycar = CarFactory.getCarBreed("USACar");
             Console.ReadLine();
         }
     }

    然后用工厂模式:

    //汽车工厂(工厂模式)
     public abstract class CarFactory
     {
         public abstract CarBreed getCarBreed();     
     }
     //日本车工厂
     public class JapanCarFactory : CarFactory
     {
         public override  CarBreed getCarBreed()
         {
             return new JapanCar();
         }
     }
      //中国车工厂
     public class ChineseCarFactory : CarFactory
     {
         public override  CarBreed getCarBreed()
         {
             return new ChineseCar();
         }
     }
      //美国车工厂
      public class USACarFactory : CarFactory
     {
         public override  CarBreed getCarBreed()
         {
             return new USACar();
         }
     }
     //程序入口
     public class Program
     {
         public static void Main(string[] args)
         {
             // 初始化工厂
             CarFactory Factory = new JapanCarFactory();
             //日本车
             CarBreed mycar = Factory.getCarBreed();
             //中国车
             Factory = new ChineseCarFactory();
             mycar = Factory.getCarBreed();
             //。。。。。。。
             Console.ReadLine();
         }
     }

    还有一种抽象工厂模式,这个比较复杂暂时还没研究透彻这里就不做阐述

    三、为什么要用工厂模式 

      优势1:一般在代码中,实例化一个类A是直接new A(),假如类A是一个完全独立的类,没有相似类,则没有必要使用工厂模式。但是如果类A本身有一个相似类B,而在实际使用类A或者类B的实例时,如果关心的是类A与类B的共同部分,则工厂模式就可以体现出它的优势。
      优势2:初始化封装。在需求一个类的实例时,假如需要一个相同属性的实例,每次初始化的操作是一样的,用工厂模式可以对初始化进行封装,简化操作。

    四、工厂模式使用场景

      (1)客户端不需要知道它所创建的对象的类。例子中我们不知道每个图片加载器具体叫什么名,只知道创建它的工厂名就完成了床架过程。
      (2)客户端可以通过子类来指定创建对应的对象。

  • 相关阅读:
    不懂编程,不会数据架构,同事做的可视化报表是如何让我佩服的?
    catalina.sh设置JAVA_HOME后还无法解决更换JDK有关问题
    TOMCAT数据源连接配置
    L​i​n​u​x​下​配​置​T​o​m​c​a​t
    linux下JAVA开发的环境配置
    tomcat catalina.sh JAVA_OPTS参数说明与配置
    TOMCAT-报错The BASEDIR environment variable is not defined correctly
    EBS条形码打印
    PA模块报错-实际返回的行数超出请求的行数(分析标准FORM报错解决思路)
    WIP完工入库及完工退回的几个重要问题
  • 原文地址:https://www.cnblogs.com/witeem/p/10109830.html
Copyright © 2020-2023  润新知