创建型设计模式——抽象工厂模式
提供一个创建一系列相关或相关依赖对象的接口,而无须指定它们具体的类。
适用于
①一个系统要独立于它的产品的创建、组合和表示时。
②一个系统要由多个产品系列中的一个来配置时。
③当要强调一系列相关的产品对象的设计以便进行联合使用时。
④当提供一个产品类库,只想显示它们的接口而不是实现时。
类图如下

1 internal class Program 2 { 3 static void Main(string[] args) 4 { 5 //初始化用户和部门信息 6 User user = new User() { Id = 1, Name = "张善", Age = 27 }; 7 Department department = new Department() { DeptId = 1, DeptName = "开发" }; 8 //MySQL操作 9 MySqlFactory mySqlFactory = new MySqlFactory(); 10 mySqlFactory.CreateUser(user); 11 mySqlFactory.CreateDepartment(department); 12 //SQL server操作 13 SqlServerFactory sqlServerFactory = new SqlServerFactory(); 14 sqlServerFactory.CreateUser(user); 15 sqlServerFactory.CreateDepartment(department); 16 17 User mySqlUser = mySqlFactory.GetUser(1); 18 Console.WriteLine(mySqlUser.ToString()+",DBName=MySql"); 19 User sqlServerUser = sqlServerFactory.GetUser(1); 20 Console.WriteLine(mySqlUser.ToString() + ",DBName=SqlServer"); 21 22 23 24 } 25 }
1 /// <summary> 2 /// 用户类,承载用户数据,也可以用接口去扩展 3 /// </summary> 4 internal class User 5 { 6 public int Id { get; set; } 7 public string Name { get; set; } 8 public int Age { get; set; } 9 public override string ToString() 10 { 11 return $"Id={Id},Name={Name},Age={Age}"; 12 } 13 }
1 /// <summary> 2 /// 部门类,承载部门数据,也可以用接口去扩展 3 /// </summary> 4 internal class Department 5 { 6 public int DeptId { get; set; } 7 public string DeptName { get; set; } 8 public override string ToString() 9 { 10 return $"DeptId={DeptId},DeptName={DeptName}"; 11 } 12 }
1 /// <summary> 2 /// 抽象工厂,用来创建一系列相关或相关依赖对象,无须指定他们具体的实现类 3 /// </summary> 4 internal interface IFactory 5 { 6 public void CreateUser(User user); 7 public User GetUser(int Id); 8 public void CreateDepartment(Department department); 9 public Department GetDepartment(int deptId); 10 }
1 /// <summary> 2 /// SqlServer类,用户往SqlServer写数据和查数据 3 /// </summary> 4 internal class SqlServerFactory : IFactory 5 { 6 private List<User> users = new List<User>(); 7 private List<Department> departments = new List<Department>(); 8 public void CreateUser(User user) 9 { 10 Console.WriteLine("SqlServer创建用户"); 11 users.Add(user); 12 } 13 public User GetUser(int Id) 14 { 15 Console.WriteLine("SqlServer查询用户"); 16 return users.First(s => s.Id == Id); 17 } 18 public void CreateDepartment(Department department) 19 { 20 Console.WriteLine("SqlServer创建部门"); 21 departments.Add(department); 22 } 23 public Department GetDepartment(int deptId) 24 { 25 Console.WriteLine("SqlServer查询部门"); 26 return departments.First(s => s.DeptId == deptId); 27 } 28 }
1 /// <summary> 2 /// MySql类,用户往MYsql写数据和查数据 3 /// </summary> 4 internal class MySqlFactory : IFactory 5 { 6 private List<User> users = new List<User>(); 7 private List<Department> departments = new List<Department>(); 8 public void CreateUser(User user) 9 { 10 Console.WriteLine("MySql创建用户"); 11 users.Add(user); 12 } 13 public User GetUser(int Id) 14 { 15 Console.WriteLine("MySql查询用户"); 16 return users.First(s => s.Id == Id); 17 } 18 public void CreateDepartment(Department department) 19 { 20 Console.WriteLine("MySql创建部门"); 21 departments.Add(department); 22 } 23 public Department GetDepartment(int deptId) 24 { 25 Console.WriteLine("MySql查询部门"); 26 return departments.First(s => s.DeptId == deptId); 27 } 28 }

浙公网安备 33010602011771号