工厂方法模式:
定义一个用户创建对象的接口,让子类决定实例化哪一个类,工厂方法是一个类的实例化延迟到了其子类。
工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,
工厂方法吧简单工厂的内部逻辑判断移到了客户端代码来进行。你想要加功能,本来是要改工厂类的,而现在是修改客户端。
/// <summary> /// 雷锋 /// </summary> public class LeiFeng { public void Wash() { Console.WriteLine("洗衣"); } public void Sweep() { Console.WriteLine("扫地"); } } /// <summary> /// 大学生 /// </summary> public class Undergraduate : LeiFeng { } /// <summary> /// 社区志愿者 /// </summary> public class CommunityVolunteer : LeiFeng { } /// <summary> /// 雷锋工厂 /// </summary> interface IFactory { LeiFeng CreateLeiFeng(); } /// <summary> /// 大学生雷锋工厂 /// </summary> public class UndergraduateFactory : IFactory { public LeiFeng CreateLeiFeng() { return new Undergraduate(); } } /// <summary> /// 社区志愿者雷锋工厂 /// </summary> public class CommunityVolunteerFactory : IFactory { public LeiFeng CreateLeiFeng() { return new CommunityVolunteer(); } }
客户端调用
IFactory factory = new UndergraduateFactory(); LeiFeng leifeng = factory.CreateLeiFeng(); leifeng.Sweep(); leifeng.Wash(); factory = new CommunityVolunteerFactory(); leifeng = factory.CreateLeiFeng(); leifeng.Sweep(); leifeng.Wash();
结果