1.课程接口
//课程
public interface Course {
//上课的方法
public void doCourse();
}
2.具体课程的实现
java课程
public class JavaCourse implements Course {
@Override
public void doCourse() {
System.out.println("上java课!");
}
}
python课程
public class PythonCourse implements Course {
@Override
public void doCourse() {
System.out.println("上python课!");
}
}
3.用来生产课程的工厂
public class CourseFactory {
/**
* @param courseType 课程的标识 可以传入类型等其他方式...
*/
public static Course getCourse(String courseType){
if ("java".equals(courseType)) {
return new JavaCourse();
}
if("python".equals(courseType)){
return new PythonCourse();
}
throw new RuntimeException("超出指定范围!");
}
}
4.客户端获取课程
public class Test {
public static void main(String[] args) {
Course java = CourseFactory.getCourse("java");
java.doCourse();
Course python = CourseFactory.getCourse("python");
python.doCourse();
}
}
运行结果:
上java课!
上python课!
依赖分析:
1.Test类使用课程时,不直接依赖JavaCourse/PythonCourse;而是依赖Course接口和CourseFactory;
2.当有更多的Course实现类的时候,比如C#Course,GoCourse,PhpCourse的时候;Test类还是只需要依赖Course接口和CourseFactory,实现松耦合。
3.通过工厂方法隐藏创建对象的细节,可以实现缓存、切面等其他操作。