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

    三.示例代码

    以上。

        

  • 相关阅读:
    Css_加载样式
    Mvc4_@RenderBody()和@RenderSection()
    C#_观察者模式
    Mvc4_MvcPager 概述
    Mvc4_Area的应用
    Nginx 服务器性能参数设置
    Nginx变量的实现机制
    天下无雾
    Nginx Http框架的理解
    【转】websocket协议规范
  • 原文地址:https://www.cnblogs.com/Khan-Sadas/p/6102533.html
Copyright © 2020-2023  润新知