zoukankan      html  css  js  c++  java
  • 设计模式----工厂模式

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

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

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

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

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

    
    
  • 相关阅读:
    高盛、沃尔玛 题做出来还挂了的吐槽
    amazon师兄debrief
    到所有人家距离之和最短的中点 296. Best Meeting Point
    问问题没人回答的情况怎么办终于有解了
    找名人 277. Find the Celebrity
    数组生存游戏 289. Game of Life
    547. Number of Provinces 省份数量
    428. Serialize and Deserialize Nary Tree 序列化、反序列化n叉树
    alias别名简介和使用
    面试官:线程池执行过程中遇到异常会发生什么,怎样处理? Vincent
  • 原文地址:https://www.cnblogs.com/liuhuimh/p/10587286.html
Copyright © 2011-2022 走看看