标签:rac code rri 图片 extends 抽象 http python 对象
定义一个创建对象的接口。但让实现这个接口的类,来决定实例化哪个类。
工厂方法让类的实例化推迟到子类中进行。
创建型
// 对于某些行为、属性是已知时, 使用抽象类
// 均为未知时, 可以使用接口
public abstract class VideoFactory {
public abstract Video getVideo();
}
public class JavaVideoFactory extends VideoFactory {
@Override
public Video getVideo() {
return new JavaVideo();
}
}
// 具体产生什么, 由子类决定, 不会由 VideoFactory 决定
// VideoFactory 只定义规范、契约,不决定产生什么
public class PythonVideoFactory extends VideoFactory {
@Override
public Video getVideo() {
return new PythonVideo();
}
}
public class Test {
public static void main(String[] args) {
VideoFactory videoFactory = new JavaVideoFactory();
// 想要 Python 的,只要把工厂重新指向 Python 工厂就行了
// VideoFactory videoFactory = new PythonVideoFactory();
Video video = videoFactory.getVideo();
video.produce();
}
}
如果此时需要加上 FEVideo,在简单方法的实现中,就需要在工厂中,再新增一个 if 了
// 优雅吗??
if ("java".equalsIgnoreCase(type)) {
return new JavaVideo();
} else if ("python".equalsIgnoreCase(type)) {
return new PythonVideo();
} else if ("fe".equalsIgnoreCase(type)) {
return new FEVideo();
}
return null;
在工厂方法中,当需要新增 FEVideo 时,我们只需要创建 FEVideo 和 FEVideoFactory。
标签:rac code rri 图片 extends 抽象 http python 对象
原文地址:https://www.cnblogs.com/Zhouxuan-C/p/10806954.html