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

    三.示例代码

    以上。

        

  • 相关阅读:
    Python3学习笔记(十二):闭包
    Python3学习笔记(十一):函数参数详解
    PostgreSQL psql中如何查看快捷功能的对应函数
    PostgreSQL逻辑复制槽 pg_recvlogical test_decoding wal2json
    记一次内存占用过高的分析
    数据库一致性解读
    PostgreSQL常用插件收集
    PostgreSQL truncate table会释放索引的空间
    PostgreSQL锁级别及什么操作获取什么锁
    PostgreSQL设置事务隔离级别实验
  • 原文地址:https://www.cnblogs.com/Khan-Sadas/p/6102533.html
Copyright © 2011-2022 走看看