1.用vs2013建模如果
[img]http://dl2.iteye.com/upload/attachment/0110/5525/f428a18e-bf05-398d-9688-ed76b44aee7c.jpg[/img]
自动生成代码
用户和部门实体
用户操作契约:
部门操作契约(接口)
部门ACCESS操作的实现
用户ACCESS操作实现类
部门SQL操作类实现
用户操作SQL数据实现
反射方式获得实现
调用
意图:
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
适用性:
1.一个系统要独立于它的产品的创建、组合和表示时.
2.一个系统要由多个产品系列中的一个来配置时.
3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。
4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。
[img]http://dl2.iteye.com/upload/attachment/0110/5525/f428a18e-bf05-398d-9688-ed76b44aee7c.jpg[/img]
自动生成代码
用户和部门实体
//------------------------------------------------------------------------------
// <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.当你提供一个产品类库,而只想显示它们的接口而不是实现时。