工厂方法模式是简单工厂模式的抽象和扩展。
工厂方法模式是由客户端来决定实例化那一个工厂实现类。
在简单工厂类中如果要增加功能改动的是工厂类,但在工厂方法模式中要改的就是客户端了,由客户端决定
package Factory;
public class MainClass {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
LeiFeng xueLeiFeng = new Undergraduate();
xueLeiFeng.BuyRice();
xueLeiFeng.Sweep();
xueLeiFeng.Wash();
simpleFactory();
factory();
}
private static void factory() {
IFactory factory = new UndergraduateFactory();
LeiFeng student = factory.CreateLeiFeng();
student.BuyRice();
student.Sweep();
student.Wash();
}
private static void simpleFactory() {
LeiFeng studentA = SimpleFactory.CreateLeiFeng("学雷锋的大学生");
studentA.BuyRice();
LeiFeng studentB = SimpleFactory.CreateLeiFeng("学雷锋的大学生");
studentB.Sweep();
LeiFeng studentC = SimpleFactory.CreateLeiFeng("学雷锋的大学生");
studentC.Wash();
}
}
class LeiFeng {
public void Sweep() {
System.out.println("sweep the floor");
}
public void Wash() {
System.out.println("wash clothes");
}
public void BuyRice() {
System.out.println("buy rice");
}
}
class Undergraduate extends LeiFeng {}
class Volunteer extends LeiFeng {}
class SimpleFactory {
public static LeiFeng CreateLeiFeng(String type) {
LeiFeng result = null;
switch (type) {
case "学雷锋的大学生":
result = new Undergraduate();
break;
case "社区志愿者":
result = new Volunteer();
break;
}
return result;
}
}
interface IFactory {
LeiFeng CreateLeiFeng();
}
class UndergraduateFactory implements IFactory {
@Override
public LeiFeng CreateLeiFeng() {
return new Undergraduate();
}
}
class VolueteerFactory implements IFactory {
@Override
public LeiFeng CreateLeiFeng() {
return new Volunteer();
}
}