大话设计模式读书 笔记(六) 工厂方法模式

工厂方法模式(Factory Method)

书中通过一个学雷锋的例子,来引出工厂方法模式。
工厂方法模式:定义了一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

工厂方法模式UMl类图:




工厂方法模式代码:

public abstract class LeiFeng { //要创建的对象的接口,这里因为要创建的对象的三个方法相同,所以我定义了一个抽象类,而没有定义接口
	public void Sweep() {
		System.out.println("扫地");
	}
	
	public void wash(){
		System.out.println("洗衣");
	}
	
	public void buyRice(){
		System.out.println("买米");
	}
}
public class Student extends LeiFeng{//具体要实例化的对象---学生类
	
}
public class Volunteer extends LeiFeng{//具体要实例化的对象--社区员工类

}
学生和社区员工都要学习雷锋,来帮助老人扫地,洗衣,买米。

public interface IFactory {//用来创建实例化对象的接口
	public LeiFeng createLerfent();//该方法返回一个具体的实例化对象,也就是具体学雷锋的对象
}
public class StudentFactory implements IFactory{//用来实例化具体对象的工厂方法类--该类用来实例化学生对象
	@Override
	public LeiFeng createLerfent() {//创建学雷锋对象方法,返回的是一个学生对象
		LeiFeng student =new Student();
		return student;
	}
}
public class VolunteerFactory implements IFactory{//用来实例化具体对象的工厂方法类--该类用来实例化社区员工的对象

	@Override
	public LeiFeng createLerfent() {//创建学雷锋对象方法,返回的是一个社区员工对象
		LeiFeng volunteer =new Volunteer();
		return volunteer;
	}
}

客户端主方法
public class Main {
	public static void main(String[] args) {
		IFactory factory = new StudentFactory();//当需要创建社区员工时,只需要修改这里就可以了
		LeiFeng xueLeiFeng = factory.createLerfent();
		xueLeiFeng .Sweep();
		xueLeiFeng .wash();
		xueLeiFeng .buyRice();
	}
}

总结:

 工厂方法模式遵循了开放-封闭原则,其实它是将判断工作转移到了客户端调用之处,这样保证了工厂体系的完整性。而简单工厂模式需要在工厂类里来判断选择哪个类。


 

posted @ 2017-04-08 16:31  Will_Don  阅读(153)  评论(0编辑  收藏  举报