简单工厂模式 - OK

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

  使用场景:html

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

  优势:java

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

  经过简单工厂类,对外部来讲,仅仅须要知道传入什么参数就能返回何种对象就能够了。没必要再理会到对象是怎样生成的,逻辑是如何实现等等。设计模式

  缺点:
ide

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

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

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

复制代码
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
相关文章
相关标签/搜索