C#设计模式学习笔记(一) 之 简单工厂模式

这是一个关于记录我学习(C#)设计模式的系列笔记,主要是记录一些知识点,和一些个人的理解。
如果真能帮助到大家的话,哪怕是一点点,我也是很开心的啦。
PS:由于本人第一次写博客,所以我写得可能会很乱,有什么建议和不足的还请大家帮帮我。

我个人认为蛤,学什么东西嘛,要做到以下几个点:

  1. 我们为什么要去学它,学它有什么用?

  2. 了解它的概念

  3. 了解它的用法

  4. 了解它的优缺点

  5. 实际应用

因此博客的大体思路会跟着上面的步骤走,当然,如果您有什么建议的请帮助帮助我。

我们为什么要去学它,学它有什么用?

经过我最近学习设计模式的体会,我得出的答案是这样的:
    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:好了,我的处女偏算是已经完毕了。刚刚看了下大神们写的博客,真的是一个天一个地啊,写得很好很详细。不过我是这么想的,虽然现在我写得很浅很不好,但是经过我的努力,将来我也会是一个大神的,哈哈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值