书接上回,我们继续探讨C#编程模式,本文主要介绍工厂方法模式。这种模式本质上是封装了对象创建的逻辑,使客户端代码与具体的产品实现解耦,具有可拓展性、封装性等有优势。文章末尾有源码链接。
工厂模式主要有以下分类:1、简单工厂模式;2、工厂方法模式;3、抽象工厂模式。简单工厂模式暂时不做介绍,抽象工厂模式会在后续更新,这里将会介绍工厂方法模式。工厂方法模式的核心是将对象的创建抽象成一个工厂接口,让子类来实现这个接口以创建具体的对象。
关键代码如下:
1、创建工厂接口
/// <summary>
/// 职业接口
/// </summary>
public interface IWork
{
/// <summary>
/// 职业的主要工作内容
/// </summary>
string Action();
}
2、创建职业类型,并继承工厂接口
/// <summary>
/// 警察
/// </summary>
public class CPolice : IWork
{
/// <summary>
/// 实现接口的方法
/// </summary>
/// <exception></exception>
public string Action()
{
return string.Format("我是警察,我负责维护社会治安");
}
}
/// <summary>
/// 教师
/// </summary>
public class CTeacher : IWork
{
/// <summary>
/// 实现接口的方法
/// </summary>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public string Action()
{
return string.Format("我是教师,我负责教会学生知识");
}
}
3、创建职业工厂接口
/// <summary>
/// 职业工厂接口
/// </summary>
public interface IWorkFactory
{
/// <summary>
/// 获取相关职业
/// </summary>
/// <returns></returns>
IWork GetWork();
}
4、创建职业工厂,继承职业工厂接口。
/// <summary>
/// 警察工厂
/// </summary>
public class CPoliceFactory : IWorkFactory
{
/// <summary>
/// 实现接口
/// </summary>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public IWork GetWork()
{
return new CPolice();
}
}
/// <summary>
/// 教师工厂
/// </summary>
public class CTeacherFactory : IWorkFactory
{
/// <summary>
/// 实现接口
/// </summary>
/// <returns></returns>
/// <exception></exception>
public IWork GetWork()
{
return new CTeacher();
}
}
5、客户端调用。
/// <summary>
/// 工厂模式测试
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_factory_Click(object sender, EventArgs e)
{
IWork work = (new CPoliceFactory()).GetWork();
tbox_factory.Text = work.Action();
}
针对调用,我这里是winform按钮实现的,各位伙伴可根据需要,把里面的代码移植。
工厂模式能够避免重复代码,也会使逻辑清晰。但是也有一定的弊端,就是会增加代码量库😂。
源码链接:C#编程模式之工厂方法模式+抽象工厂模式