前面说完简单工厂,接下来我们说说工厂模式,还是老套路,我们先模拟一个场景,我们想象一下,如果每个人都有雷锋精神找个世界将是多么的美好啊(咳咳)。今天代码我们撸雷锋。
首先,我们定义一个雷锋类,上代码
class LeiFeng { public void Sweep() { Console.WriteLine("扫地"); } public void Wash() { Console.WriteLine("洗衣"); } public void BuyRice() { Console.WriteLine("买米"); } }
雷锋,很简单,就三个方法,雷锋嘛,扫地、洗衣、买米这种事当然是小case了,哈哈,然后我们创建一个工厂接口
/// <summary> /// 雷锋工厂 /// </summary> interface IFactory { LeiFeng CreateLeifeng(); }
这个接口也很简单,就是一个CreateLeifeng方法,然后返回一个雷锋对象,正所谓万物皆对象,我们还怕没对象吗(咳咳)
接下来就是去实现这个接口和继承雷锋精神了,什么人去继承雷锋的衣钵呢,首选我们选择的人群是大学生(嘿嘿),上代码
class Undergraduate : LeiFeng { }
这个大学生类就做一件事,继承雷锋类,其啥事也不干,再然后干嘛呢,当然是创建一个工厂类啊,大学生工厂,把所有的大学生往工厂一丢,然后出来个个都是活雷锋,多好(幻想中。。)
class UndergraduateFactory : IFactory { public LeiFeng CreateLeifeng() { return new Undergraduate(); } }
这个工厂实现接口IFactory,实现CreateLeifeng这个方法,我们可以看到,在这个方法中,它实例化了一个大学生,然后返回出来了,这个方法的返回对象是Leifeng,如果这里不明白的同学请看我的设计模式----策略模式,这里就不再啰嗦了
一个大学生继承雷锋精神太单调了,我们再来一个志愿者吧,我们也希望志愿者们继承雷锋精神,同样的道理
class Volunteer:LeiFeng { }
创建的志愿者类也只干一件事,就继承雷锋类,同样创建一个志愿者工厂
class VolunteerFactory : IFactory { public LeiFeng CreateLeifeng() { return new Volunteer(); } }
这个工厂也是一样,唯一不同的是CreateLeifeng方法中志愿者工厂实例化的是志愿者对象,好了,我们暂时让这两种对象继承雷锋精神吧。所有的组件我们都创建好了,接下来,就让我们启动工厂,开始生产吧
class Program { static void Main(string[] args) { IFactory factory = new UndergraduateFactory(); LeiFeng student = factory.CreateLeifeng(); student.BuyRice(); student.Sweep(); student.Wash(); Console.WriteLine("***********"); Console.Read(); } }
首先,我们实例化了一个大学生工厂,这个工厂专门就是生产大学生雷锋的,还记得那个CreateLeifeng方法吗,在大学生工厂里,它返回的是LeiFeng对象,因为它的父类是Leifeng,所以这两个对象本质是没什么区别的(这就是面向对象的多态)
其实,注意到没有,在这里我们的子类完全是继承了父类,没有添加任何逻辑,可能我们实现的这个场景并不怎么恰当,但是意思就是这么个意思,设计模式重在神不在形,就像内功一样,没有形式,只有能量。在不同阶段的你再去回看设计模式
会有不同的感悟。好了,今天的工厂模式就说到这。。。。