• 工厂模式


    关于简单工厂,

    今天稍微写一下。

    举个简单的例子。

    假设我们需要根据命令,输出 “Hello ClassA”或者 “Hello ClassB”


    一般我们这么做~

    根据用户输入来选择,或者根据类型来选择,(用if/else 或者 switch随便你,但这不是本文的重点!大哭

    string str=Console.ReadLine();
                if (str == "ClassA")
                {
                    Console.WriteLine("Hello ClassA");
                }
                else if (str == "ClassB")
                {
                    Console.WriteLine("Hello ClassB");
                }
                else
                { 
                    
                }

    如果代码需要更改,增加一个 ClassC,那么我们不得不继续增加一个 else if


    由于以上问题,我们终于衍生出了工厂模式

    首先我们创建一个  抽象的基类~哈哈微笑

    写一个抽象方法。就是用来打印文字。

    public abstract class BaseClass
            {
                public abstract void WriteStr();
            }


    好啦,然后我们分别创建 ClassA 和 ClassB 

    让他们继承BaseClass基类,并且实现了当中的

     WriteStr()方法,哈哈

    public class ClassA : BaseClass
            {
                public override void WriteStr()
                {
                    Console.WriteLine("Hello ClassA");
                }
            }
    
            public class ClassB : BaseClass
            {
                public override void WriteStr()
                {
                    Console.WriteLine("Hello ClassB");
                }
            }


    然后我们局可以调用了

    BaseClass b = new ClassA();
                BaseClass b1 = new ClassB();
    
                b.WriteStr();       //输出:Hello ClassA
                b1.WriteStr();      //输出:Hello ClassB

    是不是很简单?根据子类引用,获得不同的对象。然后输出对应的字符串~


    但是!!!但是,兄弟们啊,既然都做到这一步了。那我们在稍微多做一步啊。。。虽然上面看似差不多了。

    但也只是差不多而已。。。

    说白了,工厂模式,就是为了减少维护工作,是class对外禁止修改,扯一大堆。。。。我觉得就是减少代码量。好维护。。。就这样。

    继续继续。

    我们在上面的代码中,继续写下:

    这里就是根据传入的T,创建不同的ClassA或者 ClassB

    public class Class2
            {
                public virtual T CreateClass<T>() where T : BaseClass, new()
                {
                    T obj = new T();
                    return obj;
                }
            }

    调用代码:

    public static void Main(string[] args)
            {
                BaseClass b = new Class2().CreateClass<ClassB>();
                b.WriteStr();
    
                Console.ReadLine();
    
                
    
            }


    好啦,就这么完成了,其实很简单。

    宗旨就是,我们将多个有关联的同种类Class继承自一个基类:BaseClass。

    然后实现他们共有的方法,

    最后通过ClassCreate来创建实例对象。

    这样,在以后如果还存在 ClassC的时候,我们只需要增加一个新的Class,而不是去修改代码。就可以啦~~~可怜



  • 相关阅读:
    Lampda或Linq中的SqlFunctions.StringConvert()
    Quartz.NET配置
    C#中TransactionScope的使用方法和原理
    .NET中使用Redis(二)
    曲苑杂坛--修改数据库名和文件组名
    曲苑杂坛--修改数据库服务器名称
    系统数据库--修改tempdb的位置
    系统数据库--恢复Master数据库
    TSQL--游标Dem
    TSQL--约束基础和Demo
  • 原文地址:https://www.cnblogs.com/hanjun0612/p/9779914.html
Copyright © 2020-2023  润新知