1.概述
定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其子类
2.适用性
1)当一个类不知道它所必须创建的对象的类的时候
2)当一个类希望由它的子类来指定它所创建的对象的时候
3)当类将创建的对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候
3.参与者
1)PRoduct 定义工厂方法所创建的对象的接口
2)ConcreteProduct 用于实现Product接口
3)Creator 声明工厂方法,该方法返回一个Product类型的对象。Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的ConcreteProduct对象。可以调用工厂方法以创建一个Product对象
4)ConcreteCreator 重定义工厂方法以返回一个ConcreteProduct实例
例子:
product包:
1 package product;2 3 public interface Work {4 void doWork();5 }
concreteproduct包:
1 package concreteproduct; 2 3 import product.Work; 4 5 public class StudentWork implements Work { 6 7 @Override 8 public void doWork() { 9 System.out.println("学生在做作业");10 }11 12 }
1 package concreteproduct; 2 3 import product.Work; 4 5 public class TeacherWork implements Work { 6 7 @Override 8 public void doWork() { 9 System.out.println("老师批审作业");10 }11 12 }
creator包:
1 package creator;2 3 import product.Work;4 5 public interface IWorkFactory {6 Work getWork();7 }
concretecreator包:
1 package concretecreator; 2 3 import concreteproduct.StudentWork; 4 import product.Work; 5 import creator.IWorkFactory; 6 7 public class StudentWorkFactory implements IWorkFactory { 8 9 @Override10 public Work getWork() {11 // TODO Auto-generated method stub12 return new StudentWork();13 }14 15 }
1 package concretecreator; 2 3 import concreteproduct.TeacherWork; 4 import product.Work; 5 import creator.IWorkFactory; 6 7 public class TeacherWorkFactory implements IWorkFactory { 8 9 @Override10 public Work getWork() {11 // TODO Auto-generated method stub12 return new TeacherWork();13 }14 15 }
test包:
1 package test; 2 3 import concretecreator.StudentWorkFactory; 4 import concretecreator.TeacherWorkFactory; 5 import creator.IWorkFactory; 6 7 public class Test { 8 public static void main(String args[]){ 9 IWorkFactory studentWorkFactory = new StudentWorkFactory();10 studentWorkFactory.getWork().doWork();11 12 IWorkFactory teacherWorkFactory = new TeacherWorkFactory();13 teacherWorkFactory.getWork().doWork();14 }15 }
新闻热点
疑难解答