zoukankan      html  css  js  c++  java
  • 简析设计模式——0简单工厂

    简析设计模式——0简单工厂

    一 简介

        简单工厂模式是将对象的创建和对象本身业务处理分离以降低系统的耦合度。其要点在于使用者仅仅需要从工厂中获取对象,而对对象如何创建并不关心。简单工厂模式比较简单,并不在GOF23种设计模式中,更像是我们平常开发中的一种习惯。

    二 结构图

    简单工厂

    三 示例

    1.接口或父类

     /// <summary>
     /// 接口--此处也可以通过抽象类或父类实现
     /// </summary>
     public interface ISender
     {
         /// <summary>
         /// 发送邮件方法
         /// </summary>
         void Send();
     }
    

    2.两个实现类

     /// <summary>
     /// Mail实现类
     /// </summary>
     public class MailSender : ISender
     {
         public void Send()
         {
             Console.WriteLine("this is MailSender!");
         }
     }
    
    /// <summary>
    /// Sms实现类
    /// </summary>
    public class SmsSender : ISender
    {
        public void Send()
        {
            Console.WriteLine("this is SmsSender!");
        }
    }
    

    3.工厂类

     /// <summary>
     /// 工厂类
     /// </summary>
     public class SenderFactory
     {   
         /// <summary>
         /// 创建ISender对象
         /// </summary>
         /// <param name="type">对象类型</param>
         /// <returns>ISender 对象</returns>
         public static ISender CreateSender(string type)
         {
             switch (type)
             {
                 case "sms":
                     return new SmsSender();
                 case "mail":
                     return new MailSender();
                 default:
                     break;
             };
             return null;
         }  
     }
    

    4.客户端类

    class Program
    {
        static void Main(string[] args)
        {
            ISender sender = SenderFactory.CreateSender("mail");
            sender.Send();//this is MailSender!       
            Console.ReadKey();
        }
    }
    

    四 优缺点及适用场景

    1. 优点:

      • 实现了对象创建与对象自身业务的分离

      • 实现了对责任的分割,客户端可以免除直接创建对象的责任,而仅仅使用对象。

      • 可以在不修改任何客户端代码的情况下更换和增加新的具体类。

    2. 缺点:

      • 工厂类集中了所有的创建逻辑,一旦工厂类挂掉,整个系统都会受到影响
      • 缺乏灵活性系统扩展困难,一旦增加新的类,就必须修改工厂创建逻辑,如果类数目过多会造成工厂类逻辑复杂
      • 使用静态工厂方法,造成工厂角色无法形成基于继承的等级结构
    3. 适用场景

      • 工厂类负责创建的对象比较少,不会造成工厂方法中的业务逻辑太过复杂
      • 客户端仅知道需要什么样的对象,而不关心如何创建对象
  • 相关阅读:
    NYOJ 10 skiing DFS+DP
    51nod 1270 数组的最大代价
    HDU 4635 Strongly connected
    HDU 4612 Warm up
    POJ 3177 Redundant Paths
    HDU 1629 迷宫城堡
    uva 796
    uva 315
    POJ 3180 The Cow Prom
    POJ 1236 Network of Schools
  • 原文地址:https://www.cnblogs.com/hunternet/p/9850145.html
Copyright © 2011-2022 走看看