大话设计模式读书 笔记(六) 工厂方法模式
工厂方法模式(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(); } }
总结:
工厂方法模式遵循了开放-封闭原则,其实它是将判断工作转移到了客户端调用之处,这样保证了工厂体系的完整性。而简单工厂模式需要在工厂类里来判断选择哪个类。