文章目录
前言
简单工厂模式是由一个工厂对象来决定创建哪一种产品类的实例
工厂方法模式是特定类的工厂决定生产这个类的实例
抽象工厂模式是由工厂创建一系类的类
下面我们就用实际案例来具体解释
简单工厂模式
创建ICourse接口
在案例中我们新建ICourse接口,并且定义record方法
ICourse:
public interface ICourse {
public void record();
}
实现ICourse接口
然后新建Java和Python课程实现这个接口
JavaCourse :
public class JavaCourse implements ICourse {
@Override
public void record() {
System.out.println("录制Java视频");
}
}
PythonCourse :
public class PythonCourse implements ICourse {
@Override
public void record() {
System.out.println("录制python视频");
}
}
创建工厂类
最后我们在工厂类中根据传递进来的Class决定创建那个类的实例对象
CourseFactory :
public class CourseFactory {
public ICourse create(Class<? extends ICourse> clazz) {
try {
if(clazz!=null) {
return clazz.newInstance();
}
} catch (Exception e){
e.printStackTrace();
}
return null;
}
}
测试
我们测试一下:
Test:
public class Test {
public static void main(String[] args) {
CourseFactory cf = new CourseFactory();
ICourse iCourse = cf.create(JavaCourse.class);
iCourse.record();
}
}
工厂方法模式
工厂方法模式是指定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法模式让类的实例化推迟到子类中进行。
创建课程类接口
ICourse :
public interface ICourse {
public void record();
}
创建具体实现课程类
JavaCourse:
public class JavaCourse implements ICourse {
@Override
public void record() {
System.out.println("录制Java视频");
}
}
PythonCourse :
public class PythonCourse implements ICourse {
@Override
public void record() {
System.out.println("录制Python视频");
}
}
创建工厂类接口
然后我们创建工厂类接口
ICourseFactory :
public interface ICourseFactory {
ICourse create();
}
创建具体工厂类
具体工厂实现这个接口
JavaCourseFactory :
public class JavaCourseFactory implements ICourseFactory{
@Override
public ICourse create() {
return new JavaCourse();
}
}
PythonCourseFactory :
public class PythonCourseFactory implements ICourseFactory{
@Override
public ICourse create() {
return new PythonCourse();
}
}
测试
然后我们在测试类中进行测试
Test :
public class Test {
public static void main(String[] args) {
ICourseFactory icf = new JavaCourseFactory();
ICourse iCourse = icf.create();
iCourse.record();
ICourseFactory picf = new PythonCourseFactory();
ICourse pCourse = picf.create();
pCourse.record();
}
}
抽象工厂模式
抽象工厂模式试纸提供一个创建一系列相关或相互依赖对象的接口,无需制定他们特定的类
创建笔记和视频接口
我们课程中需要有笔记和视频,所以新建笔记和视频的接口
INote :
public interface INote {
void edit();
}
IVideo :
public interface IVideo {
void record();
}
具体JAVA的笔记和视频
然后新建Java的笔记和视频类
JavaNote :
public class JavaNote implements INote {
@Override
public void edit() {
System.out.println("编辑java笔记");
}
}
JavaVideo :
public class JavaVideo implements IVideo {
@Override
public void record() {
System.out.println("录制java视频");
}
}
创建工厂类接口
我们创建工厂类接口,里面有创建笔记和视频的方法
CourseFactory :
public interface CourseFactory {
INote createNote();
IVideo createVideo();
}
Java课程工厂实现类
JavaCourseFactory :
public class JavaCourseFactory implements CourseFactory{
@Override
public INote createNote() {
return new JavaNote();
}
@Override
public IVideo createVideo() {
return new JavaVideo();
}
}
测试
我们测试一下
Test :
public class Test {
public static void main(String[] args) {
JavaCourseFactory javaCourseFactory = new JavaCourseFactory();
javaCourseFactory.createNote().edit();
javaCourseFactory.createVideo().record();
}
}