学习Spring,上课做的笔记。
简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式。
简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。
import java.util.List;
/**
* 学生类,里面有一个老师类集合,学生类有听课和问问题的两个方法
* 这两个方法需要调用不同老师的相应方法,这里用了一个老师接口集合的成员变量。
* 接口有三种表现形式:成员变量、形参、返回类型
* @author Administrator
*
*/
public class Student {
private List<ITeacher> teachers;
public void listen(){
for(ITeacher teacher:teachers){
teacher.teach();
}
}
public void ask(){
for(ITeacher teacher:teachers){
teacher.answer();
}
}
public List<ITeacher> getTeachers() {
return teachers;
}
public void setTeachers(List<ITeacher> teachers) {
this.teachers = teachers;
}
}
/**
* 老师类接口
* @author Administrator
*
*/
public interface ITeacher {
public void teach();
public void answer();
}
/**
* 实现老师接口的Java老师
* @author Administrator
*
*/
public class JavaTeacher implements ITeacher{
@Override
public void teach(){
System.out.println("Java课");
}
@Override
public void answer(){
}
}
/**
* 实现老师接口的艺术老师
* @author Administrator
*
*/
public class ArtTeacher implements ITeacher {
@Override
public void teach(){
System.out.println("艺术课");
}
@Override
public void answer(){
}
}
/**
* 简单工厂模式,又称静态工厂方法
* equalsIgnoreCase忽略大小写
* 如果不匹配,抛出异常,否则有很大的风险
*
* 以下是一个生产老师的工厂
* 可以理解成登录验证
* @author Administrator
*
*/
public class TeacherFactory {
public static ITeacher productTeacher(String type) throws Exception{
if("math".equalsIgnoreCase(type)){
return new MathTeacher();
}else if("art".equalsIgnoreCase(type)){
return new ArtTeacher();
}else if("java".equalsIgnoreCase(type)){
return new JavaTeacher();
}else if("tea".equalsIgnoreCase(type)){
return new Teacher();
}
throw new Exception("对不起,没有该类型的老师");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
<!-- 在Spring中的配置 -->
<bean id="teacher" class="com.njaccp.dao.Teacher"></bean>
<bean id="artTeacher" class="com.njaccp.dao.ArtTeacher"></bean>
<bean id="stu" class="com.njaccp.dao.Student">
<property name="teachers">
<list>
<ref local="teacher" />
<ref local="artTeacher" />
</list>
</property>
</bean>
</beans>
/**
* 简单工厂模式测试
*/
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import com.njaccp.dao.ITeacher;
import com.njaccp.dao.Student;
import com.njaccp.dao.TeacherFactory;
public class StudentTest {
@Test
public void testListen() {
Student student = new Student();
List<ITeacher> teachers = new ArrayList<ITeacher>();
ITeacher teacher = null;
ITeacher teacher2 = null;
try {
teacher = TeacherFactory.productTeacher("art");
teacher2 = TeacherFactory.productTeacher("tea");
} catch (Exception e) {
e.printStackTrace();
}
teachers.add(teacher);
teachers.add(teacher2);
student.setTeachers(teachers);
student.listen();
}
}
注意这里使用的是Junit测试,需要导入jar包