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


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

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

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

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

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

    
    
  • 相关阅读:
    Django~学习计划
    在路上---学习篇(一)Python 数据结构和算法 (1)
    面向对象设计原则—单一、开闭、里氏替换原则
    flex布局实现elment容器布局
    js 面向对象的三大特性
    Http状态码大全(200、404、500等)
    HTTP常见状态码 200 301 302 404 500
    Android编程中,sp和px和dp有什么区别
    Android xml资源文件中@、@android:type、@*、?、@+含义和区别
    Android虚拟键盘上下左右键按下和弹起的响应事件
  • 原文地址:https://www.cnblogs.com/liuhuimh/p/10587286.html
Copyright © 2020-2023  润新知