public interface ICourse {}
public interface INote {}
public interface IVideo {}public class JavaCourse implements ICourse {}
public class JavaNote implements INote {}
public class JavaVideo implements IVideo {}public class PythonCourse implements ICourse {}public class PythonNote implements INote{}public class PythonVideo implements IVideo {}public interface ICourseFactory { public ICourse createCourse(); public IVideo createVideo(); public INote createNote();}public class JavaCourseFactory implements ICourseFactory { @Override public ICourse createCourse() { return new JavaCourse(); } @Override public IVideo createVideo() { return new JavaVideo(); } @Override public INote createNote() { return new JavaNote(); }}public class PythonCourseFactory implements ICourseFactory { @Override public ICourse createCourse() { return new PythonCourse(); } @Override public IVideo createVideo() { return new PythonVideo(); } @Override public INote createNote() { return new PythonNote(); }}public class AbstractFactoryTest { public static void main(String[] args) { ICourseFactory javaFactory = new JavaCourseFactory(); javaFactory.createCourse(); javaFactory.createNote(); javaFactory.createVideo(); ICourseFactory pythonFactory = new PythonCourseFactory(); pythonFactory.createCourse(); pythonFactory.createNote(); pythonFactory.createNote(); }}