工厂模式
关于简单工厂,
今天稍微写一下。
举个简单的例子。
假设我们需要根据命令,输出 “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();
}
让他们继承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,而不是去修改代码。就可以啦~~~