首页 > 学院 > 开发设计 > 正文

工厂方法

2019-11-15 00:20:35
字体:
来源:转载
供稿:网友
工厂方法

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 }


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表