工厂模式

闭上眼睛回想一下我们的童年,于是一幕幕场景在脑海中如闪电般掠过,无忧无虑的笑脸,简单好玩的游戏,还有充满着各种色彩的奇思妙想,当然还有很多很多.......

是呀!童年总是让人怀念的,人终究是要长大的,曾经的发小总是要各奔东西,曾经的同桌总是要穿上嫁衣

他们都在自己的职业领域奋斗,拼搏着。(在此祝愿我所有的发小以及曾经一起学习生活过的同学们一切安好)

小感慨一下,说这些只是因为

今天遇到了小时候的一个玩伴,突然就想起了童年的很多事情,所以有感而发,在这里希望各位读者能耐心读下去.....

我们暂且叫我的朋友鹏鹏吧,我听鹏鹏说他长大以后没有上大学而是去学厨师了,这些年厨艺也大增了很多,我们聊了很多,还谈到我的另一个发小丽丽,

他说丽丽现在开了一家自己的美发沙龙店,生意还不错,让我有空可以去看看,我当然很乐意去了。

下面我们就进入今天的正题吧,今天要说的是工厂模式,在学习工厂模式之前我建议大家先学习一下简单工厂模式

工厂模式是这样定义的:定义一个用于创建对象的接口,

让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。

我们先来看看工厂模式的类图

工厂模式

在上面的例子中我,鹏鹏,丽丽虽然是发小,但我们却从事了不同的职业,我上了大学,鹏鹏学了厨师,丽丽从事了理发行业

下面让我们先来看看这个实例的类图

工厂模式

下面我们就来定义一个接口来说明我们都有自己的工作

interface Person
    {
        void Work();
    }

下面是我以及的工作

class My : Person
    {
        public void Work()
        {
            Console.WriteLine("上大学");
        }
    }

下面是鹏鹏以及鹏鹏的工作

class PengPeng : Person
    {
        public void Work()
        {
            Console.WriteLine("厨师");
        }
    }

下面是丽丽以及丽丽的工作

 class LiLi : Person
    {
        public void Work()
        {
            Console.WriteLine("理发师");
        }
    }

根据依赖倒转原则,我们把工厂类抽象出一个接口,这个接口只有一个方法,就是创建抽象产品的工厂方法。然后所有要生产具体类的工厂,就去实现这个接口

于是我们增加"另一个人"时就不需要更改原有的工厂类了,只需要增加这个人的类及他所对应的工厂类就行了

interface IFactory
    {
        Person CreatePerson();
    }
    class MyFactory : IFactory
    {
        public Person CreatePerson()
        {
            return new My();
        }
    }
    class PengPengFactory : IFactory
    {
        public Person CreatePerson()
        {
            return new PengPeng();
        }
    }
    class LiLiFactory : IFactory
    {
        public Person CreatePerson()
        {
            return new LiLi();
        }
    }

工厂模式和简单工厂模式不同,他是针对每一个类建立一个工厂,当要使用这个类时,只需调用相应的工厂就行了

客户端代码是这样的

IFactory PPF = new PengPengFactory();
            Person pengpeng = PPF.CreatePerson();
            pengpeng.Work();

工厂模式最大的优点就是遵循了开放—封闭原则,对扩展开放对修改封闭,降低了客户程序与产品对象之间的耦合。