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. 适用场景

      • 工厂类负责创建的对象比较少,不会造成工厂方法中的业务逻辑太过复杂
      • 客户端仅知道需要什么样的对象,而不关心如何创建对象
  • 相关阅读:
    Java实现 LeetCode 382 链表随机节点
    Java实现 LeetCode 382 链表随机节点
    Java实现 LeetCode 381 O(1) 时间插入、删除和获取随机元素
    Java实现 LeetCode 381 O(1) 时间插入、删除和获取随机元素
    Java实现 LeetCode 381 O(1) 时间插入、删除和获取随机元素
    Java实现 LeetCode 380 常数时间插入、删除和获取随机元素
    Java实现 LeetCode 380 常数时间插入、删除和获取随机元素
    Linux下的iwpriv(iwlist、iwconfig)的简单应用
    OCX控件的注册卸载,以及判断是否注册
    .OCX、.dll文件注册命令Regsvr32的使用
  • 原文地址:https://www.cnblogs.com/hunternet/p/9850145.html
Copyright © 2011-2022 走看看