工厂模式
闭上眼睛回想一下我们的童年,于是一幕幕场景在脑海中如闪电般掠过,无忧无虑的笑脸,简单好玩的游戏,还有充满着各种色彩的奇思妙想,当然还有很多很多.......
是呀!童年总是让人怀念的,人终究是要长大的,曾经的发小总是要各奔东西,曾经的同桌总是要穿上嫁衣
他们都在自己的职业领域奋斗,拼搏着。(在此祝愿我所有的发小以及曾经一起学习生活过的同学们一切安好)
小感慨一下,说这些只是因为
今天遇到了小时候的一个玩伴,突然就想起了童年的很多事情,所以有感而发,在这里希望各位读者能耐心读下去.....
我们暂且叫我的朋友鹏鹏吧,我听鹏鹏说他长大以后没有上大学而是去学厨师了,这些年厨艺也大增了很多,我们聊了很多,还谈到我的另一个发小丽丽,
他说丽丽现在开了一家自己的美发沙龙店,生意还不错,让我有空可以去看看,我当然很乐意去了。
下面我们就进入今天的正题吧,今天要说的是工厂模式,在学习工厂模式之前我建议大家先学习一下简单工厂模式
工厂模式是这样定义的:定义一个用于创建对象的接口,
让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。
我们先来看看工厂模式的类图
在上面的例子中我,鹏鹏,丽丽虽然是发小,但我们却从事了不同的职业,我上了大学,鹏鹏学了厨师,丽丽从事了理发行业
下面让我们先来看看这个实例的类图
下面我们就来定义一个接口来说明我们都有自己的工作
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();
工厂模式最大的优点就是遵循了开放—封闭原则,对扩展开放对修改封闭,降低了客户程序与产品对象之间的耦合。