设计模式----工厂模式

前面说完简单工厂,接下来我们说说工厂模式,还是老套路,我们先模拟一个场景,我们想象一下,如果每个人都有雷锋精神找个世界将是多么的美好啊(咳咳)。今天代码我们撸雷锋。

首先,我们定义一个雷锋类,上代码

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,所以这两个对象本质是没什么区别的(这就是面向对象的多态)

其实,注意到没有,在这里我们的子类完全是继承了父类,没有添加任何逻辑,可能我们实现的这个场景并不怎么恰当,但是意思就是这么个意思,设计模式重在神不在形,就像内功一样,没有形式,只有能量。在不同阶段的你再去回看设计模式

会有不同的感悟。好了,今天的工厂模式就说到这。。。。

 


posted @ 2019-03-24 10:48  守望阳光01  阅读(170)  评论(0编辑  收藏  举报