一个需要通过工厂创建对象的需求,所以不需要抽象,那么武器工厂就是具体实现类通过传参不同,制造不同的武器,返回类型为基类武器,实际对象为继承该基类的对象。
时间定位在冷兵器的年代,武器种类的需求开始出现,单个工厂的方式出现问题:
这时引入了工厂方法模式,可以解决这些问题。
示例:
开始生产的是匕首、太刀,后来需求变化需要宝剑的生产,而且预计后面还会生产其他的武器。
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)
{
ISqlHelper sqlHelper = fac.CreateSqlHelper();
sqlHelper.Execute();
Console.ReadKey();
}
}
#region 定义接口
//约定工厂能创建那个类型产品 武器工厂
public interface IFactory
{
ISqlHelper CreateSqlHelper();
}
//约定工厂产品的特点 武器
public interface ISqlHelper
{
int Execute();
object ExecuteScale();
}
#endregion
#region 具体实现
//工厂方法的具体实现 太刀工厂
public class MSSQLFactory : IFactory
{
public ISqlHelper CreateSqlHelper()
{
return new MSSQLSqlHelper();
}
}
//工厂方法的具体实现2 匕首工厂
public class MySQLFactory : IFactory
{
public ISqlHelper CreateSqlHelper()
{
return new MySQLSqlHelper();
}
}
//产品的具体实现 匕首
public class MySQLSqlHelper : ISqlHelper
{
public int Execute()
{
Console.WriteLine("MySQLExecute");
return 1;
}
public object ExecuteScale()
{
Console.WriteLine("MySQLExecuteScale");
return new object();
}
}
//产品的具体实现2 太刀
public class MSSQLSqlHelper : ISqlHelper
{
public int Execute()
{
Console.WriteLine("MSSQLExecute");
return 1;
}
public object ExecuteScale()
{
Console.WriteLine("MSSQLExecuteScale");
return new object();
}
}
#endregion
}
原文:https://www.cnblogs.com/BigBrotherStone/p/factory-method.html