抽象工厂模式(Abstract Factory)
抽象工厂模式(Abstract Factory Pattern)是一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类着产品类的增加需要增加额外的代码,而工厂方法模式每个具体工厂类只完成单个实例的创建,它具有很好的可扩展性。但是在现实生活中,一个工厂只创建单个产品比较少,工厂都多元化,一个工厂创建一系列的产品,如果我们要设计这样的系统时,工厂方法模式就不太适用,而使用抽象工厂模式却可以很好地解决。
using System;
namespace ConsoleApplication
{//一般每个接口或类都写在单独的.cs文件中//本示例为了执行查看方便才写在一起public interface IDatabase{void Delete();void Insert();}public interface IORM{void Delete();void Insert();}//Sqlserver的增删public class Sqlserver : IDatabase{public void Delete(){Console.WriteLine("delete data from sqlserver");}public void Insert(){Console.WriteLine("insert data to sqlserver");}}//Mysql的增删public class Mysql : IDatabase{public void Delete(){Console.WriteLine("delete data from Mysql");}public void Insert(){Console.WriteLine("insert data to Mysql");}}//Sqlserver的增删public class SqlserverORM : IORM{public void Delete(){Console.WriteLine("delete data from sqlserver by ORM");}public void Insert(){Console.WriteLine("insert data to sqlserver by ORM");}}//Mysql的增删public class MysqlORM : IORM{public void Delete(){Console.WriteLine("delete data from Mysql by ORM");}public void Insert(){Console.WriteLine("insert data to Mysql by ORM");}}public interface ICreator{IDatabase CreateDatabase();IORM CreateORM();}public class MysqlFactory:ICreator{/// /// 负责创建Mysql/// /// public IDatabase CreateDatabase(){return new Mysql();}/// /// 负责创建MysqlORM/// /// public IORM CreateORM(){return new MysqlORM();}}public class SqlserverFactory:ICreator{/// /// 负责创建Sqlserver/// /// public IDatabase CreateDatabase(){return new Sqlserver();}/// /// 负责创建SqlserverORM/// /// public IORM CreateORM(){return new SqlserverORM();}}/*public static class IFactory{//根据需求创建public static Database CreateDatabase(string dbType){Database db = null;switch (dbType){case "Sqlserver":db = new Sqlserver();break;case "Mysql":db = new Mysql();break;default:break;}return db;}}*/class Program{static void Main(string[] args){IDatabase db1 = new SqlserverFactory().CreateDatabase();db1.Delete();db1.Insert();IDatabase db2 = new MysqlFactory().CreateDatabase();db2.Delete();db2.Insert();IORM db3 = new SqlserverFactory().CreateORM();db3.Delete();db3.Insert();IORM db4 = new MysqlFactory().CreateORM();db4.Delete();db4.Insert();//添加新数据库直接添加对应的类即可Console.ReadKey();}}
}