简单工厂模式是由一个工厂对象决定建立出哪种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,能够理解为是不一样工厂模式的一个特殊实现。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"; } } }
输出以下:设计
类图以下: