标签:class code tar c color http
原文 第3章 抽象工厂模式(Abstract Factory)
场景我们的系统要同时支持两个数据库 SqlServer 跟Oracle数据库 并且不同的环境要进行随时切换。
看下面的代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 |
interface ISqlServer { //数据库添加操作 public void Add(); } interface IOracle { //数据库添加操作 public void Add(); } class SqlServer : ISqlServer { public void Add() { Console.WriteLine( "SqlServer添加操作" ); } } class Oracle : IOracle { public void Add() { Console.WriteLine( "Oracle添加操作" ); } } class SqlServerFactory : AbstractFactory { public ISqlServer GetSqlServer() { return new SqlServer(); } } class OracleFactory : AbstractFactory { public IOracle GetOracle() { return new Oracle(); } } interface AbstractFactory { public ISqlServer GetSqlServer(); public IOracle GetOracle(); } static void Main( string [] args) { //调用的场景 AbstractFactory sqlServer = new SqlServerFactory(); sqlServer.GetSqlServer().Add(); AbstractFactory oracleServer = new OracleFactory(); sqlServer.GetOracle().Add(); } |
这样调用还是觉得有点麻烦,我们可以用反射来实例化对象。 我们在来完善一下AbstractFactory。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 |
public abstract AbstractFactory { public static AbstractFactory GetInstance() { string factoryName = System.Configuration.ConfigurationManager.AppSettings[ "factoryName" ]; AbstractFactory instance; if (factoryName != "" ) instance = (AbstractFactory)Assembly.Load(factoryName).CreateInstance(factoryName); else instance = null ; return instance; } public abstract ISqlServer GetSqlServer(); public abstract IOracle GetOracle(); } //调用 static void Main( string [] args) { AbstractFactory.GetInstance().GetOracle().Add(); AbstractFactory.GetInstance().GetSqlServer().Add(); } |
1
2
3
4
5
6
7 |
//配置config文件 <? xml version = "1.0" encoding = "utf-8" ?> < configuration > < appSettings > < add key = "factoryName" value = "SqlServerFactory" ></ add > </ appSettings > </ configuration > |
这样是不是感觉方便了很多 利用反射来进行自动实例化。
设计模式系列文章入口:http://www.diyibk.com/post/39.html
第3章 抽象工厂模式(Abstract Factory),布布扣,bubuko.com
标签:class code tar c color http
原文地址:http://www.cnblogs.com/lonelyxmas/p/3720812.html