public interface IFactory {
LeiFeng createLeiFeng();
}
// 雷锋类
public class LeiFeng {
public void sweep() {
System.out.println("扫地");
}
public void wash() {
System.out.println("洗衣");
}
public void buyRice() {
System.out.println("买米");
}
}
// 学雷锋的大学生
public class Undergraduate extends LeiFeng{
}
// 学雷锋的大学生工厂
public class UndergraduateFactory implements IFactory{
@Override
public LeiFeng createLeiFeng() {
return new Undergraduate();
}
}
// 志愿者
public class Volunteer extends LeiFeng{
}
// 志愿者工厂
public class VolunteerFacory implements IFactory{
@Override
public LeiFeng createLeiFeng() {
// TODO Auto-generated method stub
return new Volunteer();
}
}
public class DemoEnter {
public static void main(String[] args) {
IFactory factory = new UndergraduateFactory();
LeiFeng student = factory.createLeiFeng();
student.buyRice();
student.sweep();
student.wash();
}
}
由上面的代码可以看到,对于工厂方法,核心是定义一个接口,让各自具体的工厂方法来实现这个接口,相对于简单工厂模式,工厂方法模式实现时,工厂方法把简单工厂的内部逻辑转移到了客户端代码来进行,它是简单工厂模式的进一步抽象喝推广。由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。但任何事物都有两面性,它的缺点是每加一个产品,就需要加一个产品工厂类,增加了额外的开发量