1、简单工厂
//实体抽象类
public abstract class Video {
public abstract void produce();
}
//Java实体类
public class JavaVideo extends Video {
@Override
public void produce() {
System.out.println("录制JAVA课程视频");
}
}
//python实体类
public class PythonVideo extends Video {
@Override
public void produce() {
System.out.println("录制Python课程视频");
}
}
//工厂类
public class VideoFactory {
public Video getVideo(Class c){
Video video = null;
try {
video = (Video)c.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return video;
}
//测试类
public class Test {
public static void main(String[] args) {
VideoFactory videoFactory = new VideoFactory();
Video video = videoFactory.getVideo(JavaVideo.class);
if(video==null){
return;
}
video.produce();
}
}
UML类图
2、工厂方法:关注产品等级结构
//实体抽象类
public abstract class Video {
public abstract void produce();
}
//抽象工厂类
public abstract class VideoFactory {
public abstract Video getVideo();
}
//Java实体类
public class JavaVideo extends Video {
@Override
public void produce() {
System.out.println("录制JAVA课程视频");
}
}
//Java工厂实体类
public class JavaVideoFactory extends VideoFactory {
@Override
public Video getVideo() {
return new JavaVideo();
}
}
//FE实体类
public class FEVideo extends Video {
@Override
public void produce() {
System.out.println("录制FE课程视频");
}
}
//FE工厂实体类
public class FEVideoFactory extends VideoFactory{
@Override
public Video getVideo() {
return new FEVideo();
}
}
//Python实体类
public class PythonVideo extends Video {
@Override
public void produce() {
System.out.println("录制Python课程视频");
}
}
//Python工厂实体类
public class PythonVideoFactory extends VideoFactory {
@Override
public Video getVideo() {
return new PythonVideo();
}
}
//测试类
public class Test {
public static void main(String[] args) {
VideoFactory videoFactory = new PythonVideoFactory();
Video video = videoFactory.getVideo();
video.produce();
}
}
UML类图
3、抽象工厂:关注一个产品族
//抽象产品族类
public abstract class Article {
public abstract void produce();
}
//抽象产品族类
public abstract class Video {
public abstract void produce();
}
//抽象产品族工厂类
public interface CourseFactory {
Video getVideo();
Article getArticle();
}
//产品族Java实体类
public class JavaArticle extends Article {
@Override
public void produce() {
System.out.println("编写JAVA课程手记");
}
}
//产品族Java实体类
public class JavaVideo extends Video {
@Override
public void produce() {
System.out.println("录制JAVA课程视频");
}
}
//产品族Java实体工厂类
public class JavaCourseFactory implements CourseFactory {
@Override
public Video getVideo() {
return new JavaVideo();
}
@Override
public Article getArticle() {
return new JavaArticle();
}
}
//产品族Python实体类
public class PythonArticle extends Article {
@Override
public void produce() {
System.out.println("编写Python手记");
}
}
//产品族Python实体类
public class PythonVideo extends Video {
@Override
public void produce() {
System.out.println("录制Python视频");
}
}
//产品族Python实体工厂类
public class PythonCourseFactory implements CourseFactory{
@Override
public Video getVideo() {
return new PythonVideo();
}
@Override
public Article getArticle() {
return new PythonArticle();
}
}
//测试类
public class Test {
public static void main(String[] args) {
CourseFactory courseFactory = new PythonCourseFactory();
Video video = courseFactory.getVideo();
Article article = courseFactory.getArticle(); //创建对象
video.produce();
article.produce(); //对象执行操作
}
}
UML类图