设计模式笔记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 }
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 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 }
View Code

 

配置文件:

  <appSettings>
    <add key="db" value="SqlServer"/>
    <!--<add key="db" value="Access"/>-->
  </appSettings>

 

1.4  总结

 

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

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

 

 

 

 

 

 

 

 

 

                                                                                                                                                                                                               

posted @ 2014-12-08 09:44  AfreadHuang  阅读(161)  评论(0编辑  收藏  举报