问题描述
大学生A每周都帮孤寡老人洗衣、扫地、买米买油。且不提及自己的名字,只说是学雷锋做好事。
大学生A毕业后,也依然会以“社区志愿者”的名义继续学雷锋做好事。而老人不需要是谁来做好事,只知道是学雷锋的人帮助就可以。
代码实现
创建抽象类LeiFeng
public class LeiFeng
{
public void Sweep()
{
Console.WriteLine("Sweep");
}
public void Wash()
{
Console.WriteLine("Wash");
}
public void BuyRice()
{
Console.WriteLine("BuyRice");
}
}
创建学雷锋的大学生UnderGraduate、社区志愿者Volunteer
public class UnderGraduate:LeiFeng
{
}
public class Volunteer:LeiFeng
{
}
创建雷锋工厂类IFactory,再定义学雷锋的大学生工厂UnderGraduateFactory、社区志愿者工厂类VolunteerFactory
public interface IFactory
{
LeiFeng CreateLeiFeng();
}
public class UnderGraduateFactory:IFactory
{
public LeiFeng CreateLeiFeng()
{
return new UnderGraduate();
}
}
public class VolunteerFactory:IFactory
{
public LeiFeng CreateLeiFeng()
{
return new Volunteer();
}
}
客户端代码如下:
class Program
{
static void Main(string[] args)
{
LeiFeng student = new UnderGraduateFactory().CreateLeiFeng();
student.Wash();
student.BuyRice();
student.Sweep();
LeiFeng volunteer = new VolunteerFactory().CreateLeiFeng();
volunteer.Wash();
volunteer.BuyRice();
volunteer.Sweep();
}
}
结构组成
工厂方法模式由三个主要角色组成:
访问接口:这里例子为雷锋类
实体类:这里例子为做好事的类
工厂类:这里例子为具体工厂