设计模式(2)――创建型模式 (三)

2014-11-24 02:43:08 · 作者: · 浏览: 8
//除法类
{
public override double GetResult()
{
double result=0;
if (NumberB == 0)
throw new Exception("除数不能为0");
result = NumberA /NumberB;
return result;
}
}


}


3 . 抽象工厂模式

提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类,创建不同的产品对象,客户端应使用不同的具体工厂(就像adidas工厂专门生产这个牌子的鞋、衣服、等装备,NIKE专门生产这个牌子的鞋、衣服、等装备)

UML图:

\

代码:

view plaincopy to clipboardprint namespace 抽象工厂模式
{
class Class2
{
static void Main(string[] args)
{
User user = new User();
Department dept = new Department();

//IFactory factory = new SqlServerFactory2();
IFactory2 factory = new AccessFactory2();
IUser iu = factory.CreateUser();

iu.Insert(user);
iu.GetUser(1);

IDepartment id = factory.CreateDepartment();
id.Insert(dept);
id.GetDepartment(1);

Console.Read();
}
}
class Department
{
private int _id;
public int ID
{
get{return _id ;}
set{_id=value ;}
}

private string _deptName;
public string DeptName
{
get{return _deptName ;}
set{_deptName =value ;}
}
}
interface IDepartment
{
void Insert(Department department);
Department GetDepartment(int id);
}
class SqlserverDepartment : IDepartment
{

public void Insert(Department department)
{
Console.WriteLine("在SQL Server中给Department表增加一条记录");
}

public Department GetDepartment(int id)
{
Console.WriteLine("在SQL Server中根据ID得到Department表的一条记录");
return null;
}
}
class AccessDepartment : IDepartment
{
public void Insert(Department department)
{
Console.WriteLine("在Access中给Department表添加一条记录");
}
public Department GetDepartment(int id)
{
Console.WriteLine("在Access中根据ID得到Department表的一条记录");
return null;
}
}
interface IFactory2
{
IUser CreateUser();
IDepartment CreateDepartment();
}
class SqlServerFactory2 : IFactory2
{

public IUser CreateUser()
{
return new SqlserverUser1();
}

public IDepartment CreateDepartment()
{
return new SqlserverDepartment() ;
}
}
class AccessFactory2 : IFactory2
{

public IUser CreateUser()
{
return new AccessUser1();
}

public IDepartment CreateDepartment()
{
return new AccessDepartment();
}
}
interface IUser //用户接口
{
void Insert(User user);
User GetUser(int id);
}
class SqlserverUser1 : IUser
{

public void Insert(User user)
{
Console.WriteLine("在sql server中给User表增加一条记录");
}

public User GetUser(int id)
{
Console.WriteLine("在SQL Server中根据ID得到User表一条记录");
return null;
}
}
class AccessUser1 : IUser
{

public void Insert(User user)
{
Console.WriteL