1.用vs2013建模如果
自动生成代码
用户和部门实体
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool
// Changes to this file will be lost if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace AbractFactory
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
public class Department
{
public virtual int ID
{
get;
set;
}
public virtual string DepartmentName
{
get;
set;
}
}
}
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool
// Changes to this file will be lost if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace AbractFactory
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
public class User
{
public virtual int ID
{
get;
set;
}
public virtual string UserName
{
get;
set;
}
}
}
用户操作契约:
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool
// Changes to this file will be lost if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace AbractFactory
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
public interface IUser
{
void InsertUser(User user);
User GetUser(int id);
}
}
部门操作契约(接口)
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool
// Changes to this file will be lost if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace AbractFactory
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
public interface IDepartment
{
void InsertDepartment(string departmentName);
Department GetDepartment(int id);
}
}
部门ACCESS操作的实现
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool
// Changes to this file will be lost if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace AbractFactory
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
public class AccessDepartment : IDepartment
{
public void Insert(Department department)
{
Console.WriteLine("在Access中给Department表增加一条记录");
}
public Department GetDepartment(int id)
{
Console.WriteLine("在Access中根据ID得到Department表一条记录");
return null;
}
}
}
用户ACCESS操作实现类
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool
// Changes to this file will be lost if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace AbractFactory
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
class AccessUser : IUser
{
public void Insert(User user)
{
Console.WriteLine("在Access中给User表增加一条记录");
}
public User GetUser(int id)
{
Console.WriteLine("在Access中根据ID得到User表一条记录");
return null;
}
}
}
部门SQL操作类实现
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool
// Changes to this file will be lost if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace AbractFactory
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
public class SqlserverDepartment : IDepartment
{
public void Insert(Department department)
{
Console.WriteLine("在Sqlserver中给Department表增加一条记录");
}
public Department GetDepartment(int id)
{
Console.WriteLine("在Sqlserver中根据ID得到Department表一条记录");
return null;
}
}
}
用户操作SQL数据实现
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool
// Changes to this file will be lost if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace AbractFactory
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
public class SqlserverUser : IUser
{
public virtual void InsertUser(User user)
{
throw new System.NotImplementedException();
}
public virtual User GetUser(int id)
{
throw new System.NotImplementedException();
}
}
}
反射方式获得实现
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool
// Changes to this file will be lost if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace AbractFactory
{
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Reflection;
using System.Text;
public class DataAccess
{
private static readonly string AssemblyName = "抽象工厂模式";
private static readonly string db = ConfigurationManager.AppSettings["DB"];
public virtual IDepartment IDepartment
{
get;
set;
}
public virtual IUser IUser
{
get;
set;
}
public virtual void CreateUser()
{
string className = AssemblyName + "." + db + "User";
IUser= (IUser)Assembly.Load(AssemblyName).CreateInstance(className);
}
public virtual void CreateDepartment()
{
string className = AssemblyName + "." + db + "Department";
IDepartment= (IDepartment)Assembly.Load(AssemblyName).CreateInstance(className);
}
}
}
调用
using AbractFactory;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DesginPatternLib.GeneratedCode
{
class Class1
{
static void Main(string[] args)
{
User user = new User();
Department dept = new Department();
DataAccess da = new DataAccess();
IUser iu = da.IUser;
iu.InsertUser(user);
iu.GetUser(1);
IDepartment id = da.IDepartment;
id.InsertDepartment(dept);
id.GetDepartment(1);
Console.Read();
}
}
}
意图:
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
适用性:
1.一个系统要独立于它的产品的创建、组合和表示时.
2.一个系统要由多个产品系列中的一个来配置时.
3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。
4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。
- 大小: 37.8 KB
分享到:
相关推荐
设计模式--抽象工厂模式实现多数据库连接 设计模式,.net设计模式,抽象工厂
通过抽象工厂模式访问两种数据库 SQL 和Access 利用泛型读取表中数据 WCF发布出去
用抽象工厂来实现多种数据库访问,包括SQL和Access。
本人做了一个抽象工厂的小案例,只要修改配置文件,就可以轻松的切换数据库,里面附有ACCESS数据库,不需要配置 sql数据库附加上去就好了,修改配置连接 就可以轻松切换 数据库 如有问题请联系qimenglin_aptech@163.com ...
ASP.NET 抽象工厂Demo 数据库链接切换 sql2005和access
由抽象工厂实现ADO.NET的多类型数据库连接:Access和SqlServer
用一个简单的小例子 实现抽象工厂设计模式 采用面向对象思想编程 程序实现了MyShool的一个简单的添加学员的功能 采用抽象工厂实现程序支持访问多数据库(Access和SQL)...详细见资料
NULL 博文链接:https://walleyekneel.iteye.com/blog/1113114
设计模式 抽象工厂模式 反射 配置文件 设计模式 抽象工厂模式 反射 配置文件 设计模式 抽象工厂模式 反射 配置文件 设计模式 抽象工厂模式 反射 配置文件 设计模式 抽象工厂模式 反射 配置文件 设计模式 抽象工厂...
Mysql数据库使用ODBC连接要自己配置 抽象工厂和三层的描述在博客里
抽象工厂模式实现计算器源码,学习C#设计模式。
抽象工厂实现多数据库访问 sql 2005 c#
1、抽象工厂模式+反射技术 2、抽象工厂模式+简单工厂模式 3、仅仅是抽象工厂模式
2、在本系统中,集合了SQL Server、Mysql、Oracle、DB2、Access数据库的不同连接方式。实现了切换数据库的最简方式! 3、本系统中附带一个新闻管理来测试测模型。 4、此模型非常适合嵌入多层、有换数据库的需求的...
抽象工厂的目的是要提供一个创建一系列相关或相互依赖对象的接口,而不需要指定它们具体的类。将抽象工厂类中的条件判断语句,用.NET中发射机制代替。抽象工厂模式实现代码(利用了反射)
深入浅出设计模式之抽象工厂模式+工厂方法模式+策略模式实现手机加工厂(加类图)
最近学习了一下设计模式,便尝试用C#对数据库的访问操作采用抽象工厂的模式实现一下,其中与标准的模式略有不同,加入了一些自己的想法,希望大家批评指正,
这些设计模式提供了一些有用的思想和实现方式,可以帮助开发人员在设计和实现复杂的软件系统时,更加灵活和高效地进行编程。 单例设计模式是一种创建型设计模式,它的主要目标是确保一个类在任何情况下都只有一个...
介绍的是工厂模式 包括简单工厂模式、工厂方法模式、抽象工厂模式 包括PPT和代码
设计模式-抽象工厂模式(讲解及其实现代码)