设计模式笔记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 DataAccess 13 { 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 IUser 31 { 32 void GetUser(); 33 } 34 35 class SqlServerUser : IUser 36 { 37 public void GetUser() 38 { 39 Console.WriteLine("用SqlServer从USer取数据"); 40 } 41 } 42 43 class AccessUser : IUser 44 { 45 public void GetUser() 46 { 47 Console.WriteLine("用Access从USer取数据"); 48 } 49 } 50 51 interface IDepartment 52 { 53 void GetDepartment(); 54 } 55 56 class SqlServerDepartment : IDepartment 57 { 58 public void GetDepartment() 59 { 60 Console.WriteLine("用SqlServer从Department取数据"); 61 } 62 } 63 64 class AccessDepartment : IDepartment 65 { 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 Program 10 { 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="SqlServer"/> <!--<add key="db" value="Access"/>--> </appSettings>
1.4 总结
1、用户表接口 含CRUD操作 ,每个子类操作一种数据库。
2、 根据配置文件的db字符,反射创建需要的数据库。这样做我们只需要修改配置文件就可以实现数据库的切换了。
本文来自博客园,作者:AfreadHuang,转载请注明原文链接:https://www.cnblogs.com/simple-blog/p/4149968.html