说明
- 工厂方法模式引入工厂等级结构,解决了简单工厂模式中工厂类职责过重的问题
- 但工厂方法模式中每个工厂只创建一类具体类的对象,后续发展可能会导致工厂类过多,因此将一些相关的具体类组成一个“具体类族”,由同一个工厂来统一生产,强调的是一系列相关的产品对象!!
编码实现
业务场景:在线教育网站,课程模块,一个课程由视频和文章共同组成,我们需要寻找java课程和Python课程
新建视频和文章抽象类
public abstract class Video {
public abstract void produce();
}
public abstract class Article {
public abstract void produce();
}
新建Java视频和文章实现类
public class JavaVideo extends Video{
@Override
public void produce() {
System.out.println("java视频");
}
}
public class JavaArticle extends Article{
@Override
public void produce() {
System.out.println("java文章");
}
}
新建Python视频和文章实现类
public class PythonVideo extends Video{
@Override
public void produce() {
System.out.println("Python视频");
}
}
public class PythonArticle extends Article{
@Override
public void produce() {
System.out.println("Python文章");
}
}
新建超级工厂接口
public interface CourseFactory {
Video getVideo();
Article getArticle();
}
java超级工厂实现类
public class JavaCourseFactory implements CourseFactory{
@Override
public Video getVideo() {
return new JavaVideo();
}
@Override
public Article getArticle() {
return new JavaArticle();
}
}
Python超级工厂实现类
public class PythonCourseFactory implements CourseFactory{
@Override
public Video getVideo() {
return new PythonVideo();
}
@Override
public Article getArticle() {
return new PythonArticle();
}
}
使用
@Test
public void test02(){
CourseFactory courseFactory = new JavaCourseFactory();
Article article = courseFactory.getArticle();
Video video = courseFactory.getVideo();
article.produce();
video.produce();
}
类图