由陈老师想到容易工厂模式

由陈老师想到简单工厂模式
今天学习一下简单工厂模式:
    为了通俗易懂,我们以陈老师摄影工作室为例:
    首先陈老师摄影工作室,主要的摄影对象是自己女朋友,
    而陈老师对自己女朋友也是有要求的,要求当然是做一些那个事情了,为此
    我们要首先定义一个陈老师女朋友的接口,如下:
   
    interface GuanXiGirlFriend
    {
        void MakeSomeThings();
    }

    有了老师的女朋友的接口了,只有符合陈老师女朋友接口的人,才能算是陈老师的女朋友,此时,张柏芝登场了,张柏芝首先要答应和陈老师做那个事情,为此,我们定义ZhangBoZhi的类,并实现女朋友接口,代码如下所示:
    
    class ZhangBoZhi:GuanXiGirlFriend
    {
        public void MakeSomeThings()
        {
            Console.Write("张柏芝和陈老师在一起的时光里,跟陈老师拍摄了艳照");
        }
    }
    

   
    陈老师是不会趴在一个女人身上一辈子的,玩腻了,自然是踹掉了,然后另一位符合要求的女友登场了,她是谁呢?恭喜你答对了,是阿娇,阿娇首先也符合了陈老师女友的要求,实现了女友的接口。
    代码如下所示:
   
    class AJiao:GuanXiGirlFriend
    {
        public void MakeSomeThings()
        {
            Console.Write("阿娇和陈老师在一起的时光里,跟陈老师拍摄了艳照,事后说出了很傻很天真");
        }
    }
    


    时间长了,陈老师对阿娇又失去了兴趣,于是找了杨永晴,首先杨永晴也实现了陈老师的女友接口,定义如下:
   
    class YanYongQing : GuanXiGirlFriend
    {
        public void MakeSomeThings()
        {
            Console.Write("杨永晴和陈老师在一起的时光里,跟陈老师拍摄了艳照,但是事后一直在一起,也没有分手");
        }
    }
    

   
    陈老师既然开摄影工作室,那肯定是积攒了不少照片,不会因为女友分手而把照片还给她们。于是,就有了笔记本坏掉的事件,后来的事情,大家都知道了。
    为此,我们定义了一个陈老师摄影工作室的工厂类,专门往外流传艳照,代码如下所示:
   
    class GuanXiSheYingFactory
    {
        public static GuanXiGirlFriend createGuanXiGirlFriend(string strName)
        {
            GuanXiGirlFriend girlFriend = null;
            switch (strName)
            {
                case "张柏芝":
                    girlFriend = new ZhangBoZhi();
                    break;
                case "阿娇":
                    girlFriend = new AJiao();
                    break;
                default:
                    girlFriend = new YanYongQing();
                    break;
            }
            return girlFriend;
        }
    }
    


    此时,我们作为一个小小小网民,想看陈老师女友的艳照,主要向陈老师摄影工作室索取就是了,代码如下所示:
    
    class Program
    {
        static void Main(string[] args)
        {
            GuanXiGirlFriend girlFriend = null;
            girlFriend = GuanXiSheYingFactory.createGuanXiGirlFriend("张柏芝");
            girlFriend.MakeSomeThings();
        }
    }
    

    
    此时,相信大家都看明白了,如果陈老师有N多女友,拍了N多艳照,发现一个,我们就实现一个陈老师女友的接口就可以了。这就是简单工厂模式的好处,易维护,易扩展,可复用。