工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。
package factorymethod;
/**
* 工厂方法模式(Factory Method)
* 雷锋类
*/
public class LeiFeng {
public void sweep() {
System.out.println("扫地");
}
public void wash() {
System.out.println("洗衣");
}
public void buyRice() {
System.out.println("买米");
}
}
package factorymethod;
/**
* 工厂方法模式(Factory Method)
* 大学生类
*/
public class Undergraduate extends LeiFeng {
@Override
public void sweep() {
System.out.println("学雷锋的大学生帮忙扫地");
}
@Override
public void wash() {
System.out.println("学雷锋的大学生帮忙洗衣");
}
@Override
public void buyRice() {
System.out.println("学雷锋的大学生帮忙买米");
}
}
package factorymethod;
/**
* 工厂方法模式(Factory Method)
* 社区志愿者类
*/
public class Volunteer extends LeiFeng {
@Override
public void sweep() {
System.out.println("社区志愿者帮忙扫地");
}
@Override
public void wash() {
System.out.println("社区志愿者帮忙洗衣");
}
@Override
public void buyRice() {
System.out.println("社区志愿者帮忙买米");
}
}
package factorymethod;
/**
* 工厂方法模式(Factory Method)
* 雷锋工厂
*/
public interface IFactory {
LeiFeng createLeiFeng();
}
/**
* 学雷锋的大学生工厂
*/
class UndergraduateFactory implements IFactory {
@Override
public LeiFeng createLeiFeng() {
return new Undergraduate();
}
}
/**
* 社区志愿者工厂
*/
class VolunteerFactory implements IFactory {
@Override
public LeiFeng createLeiFeng() {
return new Volunteer();
}
}
package factorymethod;
/**
* 工厂方法模式(Factory Method)
* 客户端main方法
*/
public class Client {
public static void main(String[] args) {
// 大学生
IFactory undergraduateFactory = new UndergraduateFactory();
LeiFeng student = undergraduateFactory.createLeiFeng();
student.sweep();
student.wash();
student.buyRice();
// 志愿者
IFactory volunteerFactory = new VolunteerFactory();
LeiFeng volunteer = volunteerFactory.createLeiFeng();
volunteer.sweep();
volunteer.wash();
volunteer.buyRice();
}
}