zoukankan      html  css  js  c++  java
  • C# 设计模式之工厂模式(一)

      写在前面,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出来,调用工厂方便得多。

    三.示例代码

    以上。

        

  • 相关阅读:
    LeetCode 42. Trapping Rain Water
    LeetCode 209. Minimum Size Subarray Sum
    LeetCode 50. Pow(x, n)
    LeetCode 80. Remove Duplicates from Sorted Array II
    Window10 激活
    Premiere 关键帧缩放
    AE 「酷酷的藤」特效字幕制作方法
    51Talk第一天 培训系列1
    Premiere 视频转场
    Premiere 暴徒生活Thug Life
  • 原文地址:https://www.cnblogs.com/Khan-Sadas/p/6102533.html
Copyright © 2011-2022 走看看