雷锋依然在人间——工厂方法模式

雷锋依然在人间——工厂方法模式

工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

雷锋依然在人间——工厂方法模式
//雷锋

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 Volunteer extends LeiFeng {
}

//雷锋工厂

public interface IFactory {
LeiFeng createLeiFeng();
}

//学雷锋的大学生工厂

public class UndergraduateFactory implements IFactory {
public LeiFeng createLeiFeng() {
    return new Undergraduate();
}
}

//社区志愿者工厂

public class VolunteerFactory implements IFactory {
public LeiFeng CreateLeiFeng() {
    return new Volunteer();
}

@Override
public LeiFeng createLeiFeng() {
    return null;
}
}

//主函数

public class Main {
public static void main(String[] args) {
    IFactory factory = new UndergraduateFactory();
    LeiFeng student = factory.createLeiFeng();

    student.BuyRice();
    student.Sweep();
    student.Wash();
}
}

工厂方法模式克服了简单工厂违背开放-封闭原则的缺点,又保持了封闭对象创建过程的优点。它们都是集中封闭了对象的创建,使得要更换对象时,不需要做大的改动就可以实现,降低客户程序与产品对象的耦合。工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。但缺点是由于每加一个产品,就需要加一个产品工厂的类,增加了额外的开发量,还是没有避免修改客户端的代码。不过利用‘反射’可以解决避免分支判断的问题。