首页 > 代码库 > 设计模式笔记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 }
调用:
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 }
配置文件:
<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: 抽象工厂模式