创建型设计模式——抽象工厂模式

提供一个创建一系列相关或相关依赖对象的接口,而无须指定它们具体的类。

适用于

①一个系统要独立于它的产品的创建、组合和表示时。

②一个系统要由多个产品系列中的一个来配置时。

③当要强调一系列相关的产品对象的设计以便进行联合使用时。

④当提供一个产品类库,只想显示它们的接口而不是实现时。

类图如下

 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     }
View Code
 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     }
View Code
 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     }
View Code
 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     }
View Code
 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     }
View Code

 

posted @ 2025-04-29 22:58  是铭不是明  阅读(7)  评论(0)    收藏  举报