工厂方法模式(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(); } }