• 设计模式(二)-创建者模式(2-0)-简单工厂模式


    一、简单工厂模式定义

    客户端不需要关注创建实例的过程。于是需要通过工厂模式,要把创建对象过程和使用对象进行分离。所以客户端只要使用对象即可,而创建对象过程由一种类来负责,该类称为工厂类。

    由于创建实例的方式是在静态方法里实现的,所以简单工厂模式也称为静态工厂方法模式。

    特点: 创建一个工厂类,根据不同的参数来创建不同类的对象,并把该对象返回给共同的一个基类。

    优点: 创建对象时,客户端不需要处理整个创建逻辑的过程。只要输入参数就可生成对应的对象。

    缺点: 1)如果工厂类存在代码逻辑的错误,一经修改后,整个系统都要受到影响。2)增加了新的实现类,工厂类里静态方法也多加了一个新的创建对象,也就增加了系统的复杂度。

    合理应用条件

    • 客户端不需要关心创建对象。
    • 创建的对象比较少,创建的类是比较少。

    角色
    抽象基类: 用以定义特征和行为的抽象接口。
    实现类: 继承抽象基类,用以实现特征和行为的具体类。
    工厂类: 根据不同的参数,创建不同的实现类,并赋值给基类。

    请添加图片描述

    二、例子

    需求:
    提供一辆汽车和一辆自行车。

    // Vehicle 作为抽象基类
        public abstract class Vehicle
        {
            public abstract void make();
        }
    // Car 继承 Vehicle 的行为特征
        public class Car : Vehicle
        {
            public override void make() {
                Console.WriteLine("Produce a Car");
            }
        }
    // Bicycle 继承 Vehicle 的行为特征
        public class Bicycle : Vehicle
        {
            public override void make(){
                Console.WriteLine("Produce a Bicycle");
            }
        }
    
    //工厂类,负责根据不同的参数来创建实现类对象。
        public static class Factory
        {
            public static Vehicle CreateVehicle(string arg) {
                Vehicle vehicle = null;
                switch(arg)
                {
                    case "Car":
                        vehicle = new Car(); break;
                    case "Bicycle":
                        vehicle = new Bicycle(); break;
                    default:
                        throw new ArgumentException("arg Invalid.new obj failed.");
                }
    
                return vehicle;
            }
        }
    
        class Program
        {
            static void Main(string[] args)
            {
            //使用实现类对象,Factory 对客户端隐藏了创建细节。
                Vehicle car = Factory.CreateVehicle("Car");
                car.make();
    
                Vehicle bicycle = Factory.CreateVehicle("Bicycle");
                bicycle.make();
    
                Console.ReadLine();
            }
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
  • 相关阅读:
    猿创征文 | 基于H5实现跨文档通信 & websocket
    【R语言入门】开启R的会话并大步向前!
    Python 图片处理笔记
    c语言从入门到实战——函数递归
    Android开发笔记(一百八十九)利用LAME录制MP3音频
    同时在端口 80 上运行 Apache Tomcat 和 Apache HTTPD
    Elasticsearch:wildcard - 通配符搜索
    让iframe为项目增加更多可能性
    软件设计模式系列之二十三——策略模式
    ABAP BAPI 复制标准项目模板实现项目立项
  • 原文地址:https://blog.csdn.net/chen1083376511/article/details/134492365