Factoryパターン(リフレクション 及び抽象Factory)
Factoryパターンは、Static Factory Methodと呼ばれ、あるクラスを定義して、ほかクラスのインスタンスを作成する。作成されたのインスタンスは一般的に共有な親クラスあるいはインタフェースがある。
はじめに
今回はFactoryパターンの簡単なサンプルを作成してみました。
1 インタフェースを用意
1 namespace FactoryDemo
2 {
3 public interface IUser
4 {
5 void Insert(User user);
6
7 User GetUser(int id);
8 }
9
10 }
2 インタフェースを実装するクラスを用意
1 public class SqlserverUser : IUser
2 {
3 /// <summary>
4 /// DBに情報を保存する
5 /// </summary>
6 /// <param name="user"></param>
7 public void Insert(User user)
8 {
9 Console.WriteLine("SqlserverのDepartmentテーブルに情報を保存する");
10 }
11
12 /// <summary>
13 /// DBから情報を取得する
14 /// </summary>
15 /// <param name="id"></param>
16 /// <returns></returns>
17 public User GetUser(int id)
18 {
19 Console.WriteLine("IDによってSqlserverのUserテーブルから情報を検索する");
20 return null;
21 }
22 }
23
24
25 public class AccessUser : IUser
26 {
27 /// <summary>
28 /// DBに情報を保存する
29 /// </summary>
30 /// <param name="user"></param>
31 public void Insert(User user)
32 {
33 Console.WriteLine("AccessのDepartmentテーブルに情報を保存する");
34 }
35
36 /// <summary>
37 /// DBから情報を検索する
38 /// </summary>
39 /// <param name="id"></param>
40 /// <returns></returns>
41 public User GetUser(int id)
42 {
43 Console.WriteLine("IDによってAccessのDepartmentテーブルから情報を検索する");
44 return null;
45 }
46 }
3 Factoryクラス
ダイナミックにオブジェクトを初期化する。
1 public class DataAccess
2 {
3
4 /// <summary>
5 /// リフレクションでユーザーオブジェクトを初期化する
6 /// </summary>
7 /// <returns></returns>
8 public static IUser CreateUser(String AssemblyName, String db)
9 {
10 string className = AssemblyName + "." + db + "User";
11 return (IUser)Assembly.Load(AssemblyName).CreateInstance(className);
12 }
13 }
4 ユーザーエンティティクラス
1 public class User
2 {
3 /// <summary>
4 /// ユーザー番号
5 /// </summary>
6 private int _id;
7 public int ID
8 {
9 get { return _id; }
10 set { _id = value; }
11 }
12 /// <summary>
13 /// ユーザー名
14 /// </summary>
15 private string _name;
16 public string Name
17 {
18 get { return _name; }
19 set { _name = value; }
20 }
21 }
5 テストクラス
1 class Program
2 {
3 static void Main(string[] args)
4 {
5 User user = new User();
6 Department dept = new Department();
7
8 IUser iu = DataAccess.CreateUser("FactoryDemo","Sqlserver");
9
10 iu.Insert(user);
11 iu.GetUser(1);
12
13 Console.Read();
14
15 }
16 }
5 このコードを実行すると
最後に
今回のコードでFactoryパターン(リフレクション 及び抽象Factory)を実装しました。更に、XMLファイルでパラメタを配置しによってFacoryバターンを実装することができます。
作成日時 2012-03-11 23:59:17