• 设计模式笔记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字符,反射创建需要的数据库。这样做我们只需要修改配置文件就可以实现数据库的切换了。

                                                                                                                                                                                                                   

  • 相关阅读:
    android PopupWindow的使用
    工作
    android StringUtils
    Android DrawableTextView图片文字居中显示
    android 布局使用GridView
    android 微信支付流程
    日记 2016.10.23 好好努力 不要放弃治疗!
    一、Python爬虫
    【Python工具】Excle 读写 (使用 xlrd 和 xlrt)
    Django中,图片显示问题--Django中静态文件处理方法指南
  • 原文地址:https://www.cnblogs.com/simple-blog/p/4149968.html
Copyright © 2020-2023  润新知