zoukankan      html  css  js  c++  java
  • 連載 Factoryパターン(リフレクション 及び抽象Factory)

    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

  • 相关阅读:
    Python mutilprocessing Processing 父子进程共享文件对象?
    BZOJ4836: [Lydsy1704月赛]二元运算
    博弈论刷题记录
    manacher(无讲解)
    UOJ_407_【IOI2018】狼人
    BZOJ_3935_Rbtree
    dsu on tree(无讲解)
    BZOJ_3744_Gty的妹子序列
    后缀数组(无讲解)
    虚树(无讲解)
  • 原文地址:https://www.cnblogs.com/zhaidh/p/2391147.html
Copyright © 2011-2022 走看看