工厂方法

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     @Override
10     public Work getWork() {
11         // TODO Auto-generated method stub
12         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     @Override
10     public Work getWork() {
11         // TODO Auto-generated method stub
12         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 }
肆虐的海水
原文地址:https://www.cnblogs.com/ckysea/p/4532523.html