设计模式(一)----- 工厂方法(FactoryMethod)----(JAVA版)

来源:互联网 发布:php后台管理模板 编辑:程序博客网 时间:2024/05/06 16:55

工厂方法(FactoryMethod):

  定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其子类


适用性:

1.当一个类不知道它所必须创建的对象的类的时候

2.当一个类希望由它的子类来指定它所创建的对象的时候

3.当一个类将创建对象的职责委托给多个帮助子类中的某一个,并且不知道希望将哪一个帮助子类是代理者这一信息局部化的时候


参与者:

1.Product

   定义工厂方法所创建的对象的接口

2.ConcreteProduct

   实现Product的接口

3.Creator

   声明工厂方法,该方法返回一个Product类型的对象

  Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的ConcreteProduct对象

   可以调用工厂方法以创建一个Product对象

4.ConcreteCreator

   重定义工厂方法以返回一个ConcreteProduct实例


UML:



一个简单的例子:

Product

[java] view plain copy
  1. public interface Work {  
  2.    void doWork();  
  3. }  

ConcreteProduct

[java] view plain copy
  1. public class StudentWork implements Work{  
  2.   public void doWork(){  
  3.      System.out.println("学生做作业");  
  4.   }  
  5. }  

[java] view plain copy
  1. public class TeacherWork implements Work{  
  2.   public void doWork(){  
  3.      System.out.println("教师审批作业");  
  4.   }  
  5. }  

Creator

[java] view plain copy
  1. public interface IWorkFactory {  
  2.    Work getWork();  
  3. }  

ConcreteCreator

[java] view plain copy
  1. public class StudentWorkFactory implements IWorkFactory {  
  2.   public Work getWork(){  
  3.     return new StudentWork();  
  4.   }  
  5. }  
[java] view plain copy
  1. public class TeacherWorkFactory implements IWorkFactory {  
  2.   public Work getWork(){  
  3.     return new TeacherWork();  
  4.   }  
  5. }  

Test

[java] view plain copy
  1. public class Test{  
  2.   public static void main(String[] args){  
  3.      IWorkFactory studentWorkFactory = new StudentWorkFactory();  
  4.      studentWorkFactory.getWork().doWork();   
  5.   
  6.      IWorkFactory teacherWorkFactory = new TeacherWorkFactory();  
  7.      teacherWorkFactory.getWork().doWork();   
  8.  }}  



Result

学生做作业

教师审批作业

0 0
原创粉丝点击