这是一个关于记录我学习(C#)设计模式的系列笔记,主要是记录一些知识点,和一些个人的理解。
如果真能帮助到大家的话,哪怕是一点点,我也是很开心的啦。
PS:由于本人第一次写博客,所以我写得可能会很乱,有什么建议和不足的还请大家帮帮我。
我个人认为蛤,学什么东西嘛,要做到以下几个点:
我们为什么要去学它,学它有什么用?
了解它的概念
了解它的用法
了解它的优缺点
实际应用
因此博客的大体思路会跟着上面的步骤走,当然,如果您有什么建议的请帮助帮助我。
我们为什么要去学它,学它有什么用?
经过我最近学习设计模式的体会,我得出的答案是这样的:
1.学习了设计模式,我的代码逻辑变强了,代码也变得漂亮了。
2.学习设计模式,可以设计出易维护、易扩展、易复用、灵活性好的程序。
3.提高了工作效率
PS:目前给我的感觉就是这么多吧,我相信越深入越能感受带设计模式带来的好处吧。
简单工厂模式的概念
简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
PS:没办法网上没找到简单工厂的结构图,因此就自己画了,此图仅是按自己的理解写的,错的话请提个醒,Thanks。
简单工厂的用法
一下是简单的案例代码:
抽象产品类
Interface IProduct
{
void GetName();
}
抽象产品类,主要是定义了具体产品的公共接口,所有具体产品都继承自此类。
具体产品A类
Class ProductA
{
public void GetName()
{
Console.WriteLine("具体产品A");
}
}
Class ProductB
{
public void GetName()
{
Console.WriteLine("具体产品B");
}
具体产品类,主要是处理与其它产品不同逻辑(妈蛋,我也不知道是不是这样,总之我是这么认为的)。
Class ProductFactory
{
public static IProduct CreateProduct(string name)
{
switch(name)
{
case "ProductA" :
return new ProductA();
case "ProductB" :
return new ProductB();
Defualt :
return null;
}
}
}
产品工厂类,提供一个方法来返回用户指定对象的实例,该方法里主要处理返回对象实例的逻辑。(我擦,语文太差,不知道怎么表达)这里我用了Switch来进行逻辑判断,大伙们也可以用if…else来实现,这个留个你们去做吧。(懒出翔的我,你懂的)
客户端代码
public Class Client
{
public static void Main(string[] args)
{
//通过产品共产来实例化产品
IProduct productA = ProductFactory.CreateProduct("ProductA");
IProduct productA = ProductFactory.CreateProduct("ProductA");
//调用具体产品里的GetName()方法
productA.GetName();
productB.GetName();
Console.RedKey();
}
}
最后的输出结果:
具体产品A
具体产品B
好了,至此简单工厂的基本代码算是弄好了。
PS:文中所说的方法也可以叫做函数、行为。
简单工厂的优缺点:
-优点
简单工厂模式把各个模块分别封装起来,客户只需要了解工厂类即可,其它关于类的创建无需知道,让他们之间降低了耦合度。
-缺点
违背了“开放-封闭原则”,照成了程序不易于扩展和重用。
简单的叙说一下“开放-封闭原则”的概念:
“开放-封闭原则”就是对扩展开发,对修改封闭。
好,从简单工厂出发,假如我们现在要添加产品C,那我们就要添加一个ProductC,且还要在ProductFactory
的Switch里面添加一条判断语句,这便修改了ProductFactory类,因此违背了“开放-封闭原则”。
实际应用
由于简单工厂违背了“开放-封闭”,扩展性差,因此一般情况下只能用在一些简单的程序逻辑里面。
PS:好了,我的处女偏算是已经完毕了。刚刚看了下大神们写的博客,真的是一个天一个地啊,写得很好很详细。不过我是这么想的,虽然现在我写得很浅很不好,但是经过我的努力,将来我也会是一个大神的,哈哈。