写在前面,PS一句:笔记专用,轻拍勿喷,看的不爽绕路前行即可。

一.举栗说明

  1.剧情:某银行财务有三位员工,分别为A、B、C三人,主要任务就是去银行取钱,如下:

 class EmloyeeA:
    {

        public void DoSomeThing()
        {
            Console.WriteLine("EmloyeeA去取钱");

        }
    }

    class EmloyeeB
    {

        public void DoSomeThing()
        {
            Console.WriteLine("EmloyeeB去取钱");

        }
    }

    class EmloyeeC 
    {

        public void DoSomeThing()
        {
            Console.WriteLine("EmloyeeC去取钱");
        }
    }

  某日主管说:“A去取钱”或者“B去取钱”的时候就有如下的动作了:

 class Manager
    {
        public Manager()
        {
            EmloyeeA emloyeeA = new EmloyeeA();
            emloyeeA.DoSomeThing();

            EmloyeeA emloyeeB = new EmloyeeA();
            emloyeeB.DoSomeThing();
        }

    }

  以上,所有动作已完成,但这样下来发现代码耦合度高(主管对每个员工都直接联系)、封装性差(每个员工信息都暴露在外面),还有用自己的话讲就是麻烦,不便于后期维护

以下是改装成工厂模式:

  2.建立员工抽象类:IEmolyee,然后各员工继承自该类:

  public interface IEmployee
    {

        void DoSomeThing();
    }

    public class EmloyeeA : IEmployee
    {
        public void DoSomeThing()
        {
            Console.WriteLine("EmloyeeA去取钱");
        }
    }

    class EmloyeeB : IEmployee
    {

        public void DoSomeThing()
        {
            Console.WriteLine("EmloyeeB去取钱");
        }
    }

    class EmloyeeC : IEmployee
    {

        public void DoSomeThing()
        {
            Console.WriteLine("EmloyeeC去取钱");
        }
    }
}

  3.建立工厂:

  

  public interface IFactory
    {
        IEmployee Creat(string id);
    }

    public class Factory : IFactory
    {
        public IEmployee Creat(string id)
        {
            switch (id)
            {
                case "A":
                    return new EmloyeeA();
                case "B":
                    return new EmloyeeB();
                case "C":
                    return new EmloyeeC();
                default:
                    return new EmloyeeA();
            }
        }
    }

  4.主管调用员工:

IFactory factory = new Factory();
            IEmployee employeeA = factory.Creat("A");
            IEmployee employeeB = factory.Creat("B");
            employeeA.DoSomeThing();
            employeeB.DoSomeThing();
            Console.ReadLine();

  以上即为工厂模式简单实例。

 

二.工厂模式特点

  1.通过IEmplyee隔离了主管与各员工的依赖关系,降低耦合度,在主管面前根本看不到EmplyeeX的信息。

  2.即使对各员工信息和整体进行增、删、改操作也不影响大局,确切的说主管不关心员工变化。

  3就代码操作而言,相对直接写个EmplyeeX出来,调用工厂方便得多。

 

三.示例代码

以上。

 

    

 

posted on 2016-11-25 17:51  Khandasas  阅读(416)  评论(0编辑  收藏  举报