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

    三.示例代码

    以上。

        

  • 相关阅读:
    开发中使用的一些小知识
    vue form表单验证
    团队作业8——第二次项目冲刺(Beta阶段)--第五天
    团队作业8——第二次项目冲刺(Beta阶段)--第四天
    团队作业8——第二次项目冲刺(Beta阶段)--第三天
    团队作业8——第二次项目冲刺(Beta阶段)--第二天
    团队作业8——第二次项目冲刺(Beta阶段)--第一天
    Beta版本冲刺计划及安排
    团队作业7——Alpha冲刺之事后诸葛亮
    团队作业6——展示博客(Alpha版本)
  • 原文地址:https://www.cnblogs.com/Khan-Sadas/p/6102533.html
Copyright © 2011-2022 走看看