C#设计模式——简单工厂模式

2021-04-09 22:25

阅读:593

标签:string   code   赋值   工作   代码复用   修改   nbsp   作用   c#   

一、简单工厂模式介绍:

 简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。

二、背景:

我们日常编程中,当使用new一个对象时,此时该类就依赖与这个对象,也就是他们之间的耦合度高,当需求变化时,我们不得不去修改此类的源码,此时我们可以运用简单工厂模式来解决这个问题。

三、情景例子:

现实生活中,我们买笔记本电脑基本都是去电器店去购买,我们想要什么品牌的只要和销售员说他们就会拿给我们,这就是现实生活中一个简单工厂的例子。所有的笔记本电器店都有,电器店相当于一个简单的工厂父类,每个笔记本品牌就是继承于他的子类,当我们需要买笔记本也就是相当于要new一个笔记本类时,我们就可以直接到电器店去购买,也就是通过电器店工厂父类去new我们所需要的笔记本子类。这样子我们就降低了依赖子类对象,我们要用到子类也只需通过工厂类去创建。

四、代码实现:

1、抽象出父类(笔记本类),这里直接抽象出笔记本这个父类更方便理解,相当于上述情景中的电器店。

    public abstract class NoteBook
    {
        public abstract void SayHello();
    }

 2、各子类继承于父类(联想品牌和IBM品牌)

    public class Lenovo : NoteBook
    {
        public override void SayHello()
        {
            Console.WriteLine("我是联想笔记本,你联想也别想");
        }
    }
    public class IBM : NoteBook
    {
        public override void SayHello()
        {
            Console.WriteLine("我是IBM笔记本");
        }
    }

 3、调用时子类赋值给父类

       static void Main(string[] args)
        {
            Console.WriteLine("请输入你想要的笔记本品牌");
            string brand = Console.ReadLine();
            NoteBook nb = GetNoteBook(brand);
            nb.SayHello();
            Console.ReadKey();
        }

        public static NoteBook GetNoteBook(string brand)
        {
            NoteBook nb = null;
            switch (brand)
            {
                case "Lenovo": nb = new Lenovo(); break;
                case "IBM": nb = new IBM(); break;
            }
            return nb;
        }

 五、总结:

简单工厂模式只是把变化移到了工厂类中罢了,没有变化的问题,因为如果我们想要新的笔记本品牌时,此时我们还是需要修改工厂类中的方法,也就是多加case语句。这个就是简单工厂模式的缺点所在,而且不止这点,工厂类一旦不能正常工作,整个系统都会受到影响。

然而,简单工厂模式与之前的实现也有它的优点:

1、简单工厂模式解决了客户端直接依赖于具体对象的问题,客户端可以消除直接创建对象的责任,而仅仅是消费产品。简单工厂模式实现了对责任的分割。

2、简单工厂模式也起到了代码复用的作用,去购买笔记本的所有人只需要负责消费就可以了,并不需要在自己类中实现,此时简单工厂的方法就让所有客户共用了。

C#设计模式——简单工厂模式

标签:string   code   赋值   工作   代码复用   修改   nbsp   作用   c#   

原文地址:https://www.cnblogs.com/jiechou/p/9053993.html


评论


亲,登录后才可以留言!