模式介绍:今天我们介绍第三中编程模式,抽象工厂模式。顾名思义还是和工厂相关,同时也与工厂方法模式有着千丝万缕的联系,但是其本质又与工厂方法模式大相径庭。这里先来简单介绍下二者的区别,以免混淆。文章末尾有源码链接。
抽象工厂模式:提供一个接口,用于创建一系列相关的对象,而无需指定具体的类。它适用于需要一次性创建多个相关对象,以形成一个族群。抽象工厂模式通常由抽象工厂、具体工厂、抽象产品和具体产品组成。通过切换具体工厂实现类,可以改变整个族群。
工厂方法模式:它将对象的创建延迟到子类中进行。由子类决定具体实例化哪个类。通过切换具体工厂的子类,来改变单个实例(也可说产品)。
以上就是二者的区别,总的来说,抽象工厂模式更注重一些列相关对象的创建。接下来就安排示例代码👌。
1、创建抽象工厂接口。
/// <summary>
/// 抽象职业工厂接口
/// </summary>
public interface IWorkAstFac
{
/// <summary>
/// 创建职业内容
/// </summary>
/// <returns></returns>
string CreateWorkContent();
/// <summary>
/// 创建每天的工作量
/// </summary>
/// <returns></returns>
int CreateWorkHours();
}
2、创建实现抽象接口的具体的类。
/// <summary>
/// 实现了 IWorkAstFac 接口的 CPoliceAF 类
/// </summary>
public class CPoliceAF : IWorkAstFac
{
public string CreateWorkContent()
{
return PoliceWorkContent();
}
public int CreateWorkHours()
{
return PoliceWorkHours();
}
private string PoliceWorkContent()
{
return string.Format("维护社会治安");
}
private int PoliceWorkHours()
{
return 8;
}
}
/// <summary>
/// 实现了 IWorkAstFac 接口的 CTeacherAF 类
/// </summary>
public class CTeacherAF : IWorkAstFac
{
public string CreateWorkContent()
{
return TeacherWorkContent();
}
public int CreateWorkHours()
{
return TeacherWorkHours();
}
private string TeacherWorkContent()
{
return string.Format("教书育人");
}
private int TeacherWorkHours()
{
return 12;
}
}
3、使用抽象工厂来创建相关对象。
/// <summary>
/// 使用抽象工厂来创建职业信息
/// </summary>
public class DataTransfer
{
private IWorkAstFac _workAstFac;
public DataTransfer(IWorkAstFac iWorkAstFac)
{
_workAstFac = iWorkAstFac;
}
public string GetWorkInfo()
{
return string.Format("我的职业内容是:" + _workAstFac.CreateWorkContent() + " ; 我每天工作 " + _workAstFac.CreateWorkHours() + " 个小时");
}
}
4、客户端调用。
/// <summary>
/// 抽象工厂测试
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_astFac_Click(object sender, EventArgs e)
{
tbx_astFac.Text = string.Empty;
// 假设我们想使用CPoliceAF信息
IWorkAstFac iWorkAstFac = new CPoliceAF();
DataTransfer dataTransfer = new DataTransfer(iWorkAstFac);
tbx_astFac.Text = dataTransfer.GetWorkInfo();
// 如果我们想切换到CPoliceAF的信息,只需更改工厂实现
iWorkAstFac = new CTeacherAF();
dataTransfer = new DataTransfer(iWorkAstFac);
tbx_astFac.Text += "\r\n" + dataTransfer.GetWorkInfo();
}
这里还是使用winform按钮事件进行的调用,各位伙伴自行修改调用方法即可。
以上就是我所了解的抽象工厂的相关内容,希望能给各位一定的帮助,也欢迎各位大神指导错误😃
资源链接:C#编程模式之工厂方法模式+抽象工厂模式