>>返回《C#常用设计模式》
抽象工厂就是将生产实例的工厂和生产的产品进行抽象,使得可以在不同的场景更换工厂,生产出具有抽象产品特点的一系列实际产品。
类图:
抽象工厂: AbstractFactory 实际工厂: ConcreteFactory1, ConcreteFactory1 抽象产品: AbstractProductA, AbstractProductB 实际产品: ProductA1, ProductA2
AbstractFactory
ConcreteFactory1, ConcreteFactory1
AbstractProductA, AbstractProductB
ProductA1, ProductA2
时间定位在出现了热兵器之后,热兵器的出现,导致武器被细分,需要将之前使用工厂方法的业务复杂化,抽象出了携带方便的武器和威力强的武器,导致工厂方法的设计不能满足我们的需求,这个时候出现了抽象工厂设计模式。
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Demo{ class Program { static IFactory fac = new MySQLFactory(); static void Main(string[] args) { IUserDAL userDAL = fac.CreateUserDAL(); userDAL.AddUser(); Console.ReadKey(); } } #region 定义接口 //约定工厂能创建那些类型产品 武器工厂 public interface IFactory { IUserDAL CreateUserDAL(); IRoleDAL CreateRoleDAL(); } //约定工厂产品的特点 携带方便的武器 public interface IUserDAL { void AddUser(); } // 威力强的武器 public interface IRoleDAL { void AddRole(); } #endregion #region 具体实现 //工厂的具体实现 军刀工厂 public class MySQLFactory : IFactory { public IUserDAL CreateUserDAL() { return new MySQLUserDAL(); } public IRoleDAL CreateRoleDAL() { return new MySQLRoleDAL(); } } //产品的具体实现 匕首 public class MySQLUserDAL : IUserDAL { public void AddUser() { Console.WriteLine("MySQLAddUser"); } } //太刀 public class MySQLRoleDAL : IRoleDAL { public void AddRole() { Console.WriteLine("MySQLAddRole"); } } //工厂的具体实现 枪械工厂 public class MSSQLFactory : IFactory { public IUserDAL CreateUserDAL() { return new MSSQLUserDAL(); } public IRoleDAL CreateRoleDAL() { return new MSSQLRoleDAL(); } } //产品的具体实现 手枪 public class MSSQLUserDAL : IUserDAL { public void AddUser() { Console.WriteLine("MSSQLAddUser"); } } //机枪 public class MSSQLRoleDAL : IRoleDAL { public void AddRole() { Console.WriteLine("MSSQLAddRole"); } } #endregion}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Demo
{
class Program
static IFactory fac = new MySQLFactory();
static void Main(string[] args)
IUserDAL userDAL = fac.CreateUserDAL();
userDAL.AddUser();
Console.ReadKey();
}
#region 定义接口
//约定工厂能创建那些类型产品 武器工厂
public interface IFactory
IUserDAL CreateUserDAL();
IRoleDAL CreateRoleDAL();
//约定工厂产品的特点 携带方便的武器
public interface IUserDAL
void AddUser();
// 威力强的武器
public interface IRoleDAL
void AddRole();
#endregion
#region 具体实现
//工厂的具体实现 军刀工厂
public class MySQLFactory : IFactory
public IUserDAL CreateUserDAL()
return new MySQLUserDAL();
public IRoleDAL CreateRoleDAL()
return new MySQLRoleDAL();
//产品的具体实现 匕首
public class MySQLUserDAL : IUserDAL
public void AddUser()
Console.WriteLine("MySQLAddUser");
//太刀
public class MySQLRoleDAL : IRoleDAL
public void AddRole()
Console.WriteLine("MySQLAddRole");
//工厂的具体实现 枪械工厂
public class MSSQLFactory : IFactory
return new MSSQLUserDAL();
return new MSSQLRoleDAL();
//产品的具体实现 手枪
public class MSSQLUserDAL : IUserDAL
Console.WriteLine("MSSQLAddUser");
//机枪
public class MSSQLRoleDAL : IRoleDAL
Console.WriteLine("MSSQLAddRole");
原文链接:http://www.cnblogs.com/BigBrotherStone/p/abstract-factory.html
本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728