首页 > 代码库 > 设计模式笔记10: 抽象工厂模式

设计模式笔记10: 抽象工厂模式

1.1  定义

  提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。                                                                                                                                                                                                                                                                                                            

 

1.2  类图

                                     

 

 

 

1.3  代码实现

 

 1 using System; 2 using System.Collections.Generic; 3 using System.Configuration; 4 using System.Linq; 5 using System.Reflection; 6 using System.Text; 7 using System.Threading.Tasks; 8  9 namespace 抽象工厂模式10 {11     // 根据数据库名反射创建对应的数据库操作对象12     class DataAccess13     {14         public static readonly string DBStr = ConfigurationManager.AppSettings["db"];15         public static readonly string AssemblyName = "抽象工厂模式";16 17         public static IUser CreateUser()18         {19             string className = AssemblyName + "." + DBStr + "User";20             return (IUser)Assembly.Load(AssemblyName).CreateInstance(className);21         }22 23         public static IDepartment CreateDepartment()24         {25             string className = AssemblyName + "." + DBStr + "Department";26             return (IDepartment)Assembly.Load(AssemblyName).CreateInstance(className);27         }28     }29 30     interface IUser31     {32         void GetUser();33     }34 35     class SqlServerUser : IUser36     {37         public void GetUser()38         {39             Console.WriteLine("用SqlServer从USer取数据");40         }41     }42 43     class AccessUser : IUser44     {45         public void GetUser()46         {47             Console.WriteLine("用Access从USer取数据");48         }49     }50 51     interface IDepartment52     {53         void GetDepartment();54     }55 56     class SqlServerDepartment : IDepartment57     {58         public void GetDepartment()59         {60             Console.WriteLine("用SqlServer从Department取数据");61         }62     }63 64     class AccessDepartment : IDepartment65     {66         public void GetDepartment()67         {68             Console.WriteLine("用Access从Department取数据");69         }70     }71 72 73 }
View Code

 

调用:

 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6  7 namespace 抽象工厂模式 8 { 9     class Program10     {11         static void Main(string[] args)12         {13             IUser user = DataAccess.CreateUser();14             user.GetUser();15 16             IDepartment dep = DataAccess.CreateDepartment();17             dep.GetDepartment();18         }19     }20 }
View Code

 

配置文件:

  <appSettings>    <add key="db" value=http://www.mamicode.com/"SqlServer"/>    <!--<add key="db" value=http://www.mamicode.com/"Access"/>-->  </appSettings>

 

1.4  总结

 

  1、用户表接口 含CRUD操作 ,每个子类操作一种数据库。

  2、 根据配置文件的db字符,反射创建需要的数据库。这样做我们只需要修改配置文件就可以实现数据库的切换了。

 

 

 

 

 

 

 

 

 

                                                                                                                                                                                                               

设计模式笔记10: 抽象工厂模式