工场方法模式java源码实现(大话设计模式学习备忘录)

工厂方法模式java源码实现(大话设计模式学习备忘录)
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 {

	@Override
	public LeiFeng CreateLeiFeng() {
		return new Undergraduate();
	}

}

public class VolunteerFactory implements IFactory {

	@Override
	public LeiFeng CreateLeiFeng() {
		return new Volunteer();
	}

}

/**
 * <h1>工厂模式</h1>
 * QS:学雷锋
 * @author xangqun
 * 
 */
public class Program {

	/**<b>工厂模式(factory)</b>
	 * 定义一个创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
	 * <br>简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。
	 * <br>工厂方法模式实现时,客户端需要决定实例化那个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行。
	 * 你想要加的功能,本来是改工厂类的,而现在是修改客户端。
	 * @param args
	 */
	public static void main(String[] args) {

		IFactory factory=new VolunteerFactory();
		LeiFeng volunteer=factory.CreateLeiFeng();
		volunteer.BuyRice();
		volunteer.Wash();
		volunteer.Sweep();
		
		IFactory factory2=new UndergraduateFactory();
		LeiFeng student=factory2.CreateLeiFeng();
		student.BuyRice();
		student.Wash();
		student.Sweep();
	}

}