抽象工厂模式:
提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。
用反射,减少swith的代码(99~112行)
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
namespace 设计模式
{
class User
{
private int id;
public int ID
{
get { return id; }
set { id = value; }
}
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
interface IUser
{
void Insert(User user);
User GetUser(int id);
}
class SqlserverUser : IUser
{
public void Insert(User user)
{
Console.WriteLine("在SQL数据库中插入user数据的实现");
}
public User GetUser(int id)
{
Console.WriteLine("在SQL根据id找出user用户名的具体实现");
return null;
}
}
class AccessUser : IUser
{
public void Insert(User user)
{
Console.WriteLine("在Access数据库中插入user数据的实现");
}
public User GetUser(int id)
{
Console.WriteLine("在Access根据id找出user用户名的具体实现");
return null;
}
}
class Worker
{
private int id;
public int ID
{
get { return id; }
set { id = value; }
}
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
interface IWork
{
void Insert(Worker worker);
Worker GetWorker(int id);
}
class SqlserverWorker : IWork
{
public void Insert(Worker worker)
{
Console.WriteLine("在SQL数据库中插入worker数据的实现");
}
public Worker GetWorker(int id)
{
Console.WriteLine("在SQL根据id找出worker用户名的具体实现");
return null;
}
}
class AccessWorker : IWork
{
public void Insert(Worker worker)
{
Console.WriteLine("在Access数据库中插入worker数据的实现");
}
public Worker GetWorker(int id)
{
Console.WriteLine("在Access根据id找出worker用户名的具体实现");
return null;
}
}
class DataHandle
{
private static readonly string AssemblyName = "设计模式";
private static string db = "Sqlserver";
public void Readin()
{
db = Console.ReadLine();
}
public static IUser CreateUser()
{
string ClassName = AssemblyName + "." + db + "User";
return (IUser)Assembly.Load("设计模式").CreateInstance(ClassName);
}
}
class Costume
{
//客户端程序
static void Main(string[] args)
{
User user = new User();
Worker worker = new Worker();
DataHandle dataHandle = new DataHandle();
Console.WriteLine("enter Sqlserver or Access");
dataHandle.Readin();
IUser user1 = DataHandle.CreateUser();
user1.GetUser(122);
}
}
}