工厂模式:
工厂模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其他子类。
结构图:
代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 工厂模式_leifeng
{
class LeiFeng //创建雷锋类,并设置方法
{
public void Sweep() //方法1
{
Console.WriteLine("扫地");
}
public void Wash() //方法2
{
Console.WriteLine("洗衣服");
}
public void BuyRice() //方法3
{
Console.WriteLine("买大米");
}
}
class Undergraduate : LeiFeng //学雷锋的大学生类
{
}
class Volunteer : LeiFeng //学雷锋的社区志愿者
{
}
interface IFactory //雷锋工厂
{
LeiFeng CreateLeiFeng(); //创建雷锋的方法
}
class UndergraduateFactory : IFactory //学雷锋大学生工厂
{
public LeiFeng CreateLeiFeng() //重写雷锋方法
{
return new Undergraduate();
}
}
class Volunteerfactory : IFactory
{
public LeiFeng CreateLeiFeng()
{
return new Volunteer();
}
}
class Program
{
static void Main(string[] args)
{
IFactory factory = new UndergraduateFactory();
LeiFeng student = factory.CreateLeiFeng();
student.BuyRice();
student.Sweep();
student.Wash();
Console.ReadKey();
}
}
}
解释:
通过创建 雷锋类,大学生类和志愿者类,大学生和志愿者继承雷锋类,同时创建 雷锋工厂和学雷锋大学生工厂,然后在客户端选择创建 大学生去当雷锋还是志愿者去当雷锋。
总结:
工厂模式和简单工厂模式相比的话就是克服了简单工厂的 违背开-封闭原则,通过多态性降低客户和程序之间耦合性,但是造成了增加一个功能就得多添加一个工厂,这样无形之中增加了开发量。