zoukankan      html  css  js  c++  java
  • AbstractFactory 模式

    //问题描述:操作数据库。数据库可能是Access、SQL等。以操作用户信息、部门信息为例。
    //可能在任意数据库中操作。
    //User类;Department类; IUser,UserOperAccess,UserOperSQL;
    //IDep,DepOperAccess,DepOperSQL;
    //DataAccess:创建出操作类型
    //通过配置文件来管理(通过反射机制动态加载)要创建的操作类型。
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Reflection;
    using System.Configuration;

    namespace AbstractFactory
    {
        public class User                //user info
        {
            private string name;
            private int id;

            public string Name
            {
                get { return name; }
                set { name = value; }
            }
            public int Id
            {
                get { return id; }
                set { id = value; }
            }
        }
        public class Department          //department info
        {
            private string depName;
            private int num;

            public string DepName
            {
                get { return depName; }
                set { depName = value; }
            }
            public int Num
            {
                get { return num; }
                set { num = value; }
            }
        }

        public interface IUserOper      //user operation
        {
            void Insert(User user);
            void GetName(int id);
        }
        public class UserOperSQL : IUserOper
        {
            public void Insert(User user)
            {
                Console.WriteLine("Insert  user info into SQL ");
            }
            public void GetName(int id)
            {
                Console.WriteLine("Get user info from SQL");
            }
        }
        public class UserOperAccess : IUserOper
        {
            public void Insert(User user)
            {
                Console.WriteLine("Insert user info into Access");
            }
            public void GetName(int id)
            {
                Console.WriteLine("Get user info from Access");
            }
        }
        public interface IDepartOper   //department operation
        {
            void Insert(Department dep);
            void GetName(int num);
        }
        public class DepOperSQL : IDepartOper
        {
            public void Insert(Department dep)
            {
                Console.WriteLine("Insert department info into SQL ");
            }
            public void GetName(int num)
            {
                Console.WriteLine("Get department info from SQL ");
            }
        }
        public class DepOperAccess : IDepartOper
        {
            public void Insert(Department dep)
            {
                Console.WriteLine("Insert department info into Access ");
            }
            public void GetName(int num)
            {
                Console.WriteLine("Get department info from Access ");
            }
        }
        public class DataAccess
        {
            public static readonly string AssemblyName = "AbstractFactory";
            public static readonly string dbName = ConfigurationManager.AppSettings["DB"];

            public static IUserOper CreateUserOper()       //创建用户操作:  Access、 SQL 等
            {
                string userName = AssemblyName + "." + "UserOper" + dbName;
                return (IUserOper)Assembly.Load(AssemblyName).CreateInstance(userName);
            }
            public static IDepartOper CreateDepOper()      //创建部门操作:  Access、 SQL 等
            {
                string depName = AssemblyName + "." + "DepOper" + dbName;
                return (IDepartOper)Assembly.Load(AssemblyName).CreateInstance(depName);
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                User u1 = new User();
                Department d1 = new Department();

                IUserOper iu = DataAccess.CreateUserOper();
                iu.Insert(u1);
                iu.GetName(1);

                IDepartOper id = DataAccess.CreateDepOper();
                id.Insert(d1);
                id.GetName(1);

                Console.Read();
            }
        }
    }
    //配置文件内容:App.config
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <appSettings>
        <add key="DB" value="SQL"/>         //可更换
      </appSettings>
    </configuration>

  • 相关阅读:
    函数调用栈的总结
    Calling convention-调用约定
    函数可以返回结构体的原因
    pthread_join/pthread_exit的用法解析
    线程退出的几种方式和资源回收【线程编程中避免内存泄漏】
    线程状态与tcb、线程的生命周期
    pthread_cleanup_push vs Autorelease VS 异常处理
    thread.h
    Thread Control Block
    线程与cpu
  • 原文地址:https://www.cnblogs.com/MayGarden/p/1529072.html
Copyright © 2011-2022 走看看