zoukankan      html  css  js  c++  java
  • 设计模式之抽象工厂模式

      抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

    最大的好处便是易于交换产品系列,由于具体工厂类,在一个应用中只需在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易,它只需改变具体工厂即可使用不同的产品配置。

      他使具体创建实例的过程与客户端分离,客户端是通过它们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离。  

    下面的代码还使用了反射与XML.

    代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Reflection;
    using System.Configuration;
    
    namespace 设计模式之抽象工厂模式2
    {
        class Deparentment{
    
        }
        interface IDepartment
        {
            void Insert(Deparentment department);
            Deparentment GetDepartment();
        }
        class SqlserverDepartment : IDepartment
        {
           public void Insert(Deparentment deparent)
            {
                Console.WriteLine("在SQL中为deparent表增加了一条记录");
            }
           public Deparentment GetDepartment()
            {
                Console.WriteLine("从SQL中的deparent表中取出了一条记录");
                return new Deparentment();
            }
        }
        class AccessDeparent:IDepartment
        {
           public void Insert(Deparentment deparent)
            {
                Console.WriteLine("在Access中为deparent表增加了一条记录");
            }
          public  Deparentment GetDepartment()
            {
                Console.WriteLine("从Access中的deparent表中取出了一条记录");
                return new Deparentment();
            }
        }
        class User
        {
    
        }
        interface IUser
        {
            void Insert(User u);
            User GetUser();
        }
        class SqlUser:IUser
        {
            public void Insert(User u)
            {
                Console.WriteLine("在Sql中向User表中添加了一条记录");
            }
            public User GetUser()
            {
                Console.WriteLine("从SQL中的User表中取出了一条记录");
                return new User();
            }
        }
        class AccessUser:IUser
        {
            public void Insert(User u)
            {
                Console.WriteLine("在Accesss中向User表中添加了一条记录");
            }
            public User GetUser()
            {
                Console.WriteLine("从Access中的User表中取出了一条记录");
                return new User();
            }
        }
        class DataAccess
        {
            private static readonly string AssemblyName = "设计模式之抽象工厂模式2";
            private static readonly string db = ConfigurationManager.AppSettings["DB"];
            public static IUser CreateUser()
            {
                string className = AssemblyName + "." + db + "User";
                return (IUser)Assembly.Load(AssemblyName).CreateInstance(className);
            }
            public static IDepartment CreateDeparent()
            {
                string className = AssemblyName + "." + db + "Department";
                return (IDepartment)Assembly.Load(AssemblyName).CreateInstance(className);
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                User user = new User();
                Deparentment dept = new Deparentment();
                IUser iu = DataAccess.CreateUser();
                iu.Insert(user);
                iu.GetUser();
                Console.Read();
            }
        }
    }

    XML文件:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <startup> 
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
        </startup>
      <appSettings>
        <add key="DB" value="Access"/>
      </appSettings>
    </configuration>

    运行结果:

  • 相关阅读:
    unity配置Android SDK,并构建导出apk格式
    eclipse安装Android插件
    jQuery常用事件详解
    jQuery的DOM操作小案例
    jQuery的DOM操作详解
    jQuery九类选择器详解
    jQuery简单入门
    JS表单前台校验模板
    SSH框架整合(全注解)
    SSH框架整合(XML)
  • 原文地址:https://www.cnblogs.com/JsonZhangAA/p/5554559.html
Copyright © 2011-2022 走看看