zoukankan      html  css  js  c++  java
  • 简单工厂模式

      简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。

      使用场景:

    • 工厂类负责创建的对象比较少;
    • 客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心;
    • 由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用。

      优点:

      工厂类是整个模式的关键。包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象。

      通过简单工厂类,对外部来说,仅仅需要知道传入什么参数就能返回何种对象就可以了。不必再理会到对象是怎样生成的,逻辑是如何实现等等。

      缺点:

      由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求。这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利;

      简单工厂模式解决的是对象创建的问题,它的功能是根据传入的不同参数,创建不同的对象。

      基于简单工厂模式的简单示例:

    复制代码
    namespace 简单工厂
    {
        public class Program
        {
            static void Main(string[] args)
            {
                DataBase DB = SimpleFactory.GetInstance("Oracle");
                Console.WriteLine(DB.SelectTopOne());
    
                DataBase DB2 = SimpleFactory.GetInstance("SQLServer");
                Console.WriteLine(DB2.SelectTopOne());
    
                Console.ReadKey();
            }
        }
    
        //简单工厂类,判断类,用于返回对应的的对象
        public class SimpleFactory
        {
            public static DataBase GetInstance(string type)
            {
                DataBase db = null;
                switch (type)
                {
                    default:
                    case "SQLServer":
                        db = new SQLServer();
                        break;
                    case "Oracle":
                        db = new Oracle();
                        break;
                }
                return db;
            }
        }
    
        //基类
        public class DataBase
        { 
            public virtual string SelectTopOne()
            {
                return "SELECT TOP 1 * FROM Table";
            }
        }
    
        //实现类1
        public class SQLServer : DataBase
        {
            public override string SelectTopOne()
            {
                return "SELECT TOP 1 * FROM Table";
            }
        }
    
        //实现类2
        public class Oracle : DataBase
        {
            public override string SelectTopOne()
            {
                return "SELECT * FROM Table WHERE ROWRUM <= 1";
            }
        }
    }
    复制代码

      输出如下:

      

      类图如下:

      

     
     
    分类: 设计模式
     
    1
    0
     
    (请您对文章做出评价)
     
    « 上一篇:单例模式 - OK
    » 下一篇:策略模式 - OK
  • 相关阅读:
    ie6动态创建iframe无法显示内容的bug
    时间字符串解析
    自定义时间格式转换代码
    MySql存储过程异常处理示例
    解析数字签名的Substring结构
    自动输出类的字段及值
    深复制与浅复制的实现
    ie版本过低提示升级ie的示例
    Web安全攻防TCP/IP安全篇
    不同网段相互通信实验
  • 原文地址:https://www.cnblogs.com/mingxuantongxue/p/4778078.html
Copyright © 2011-2022 走看看