package abstractfactory
type Article interface {
produce()
}
type Video interface {
produce()
}
type CourseFactory interface {
getVideo() Video
getArticle() Article
}
package tech.selinux.design.pattern.creational.abstractfactory;
public abstract class Video {
public abstract void produce();
}
package tech.selinux.design.pattern.creational.abstractfactory;
public abstract class Article {
public abstract void produce();
}
package tech.selinux.design.pattern.creational.abstractfactory;
public interface CourseFactory {
Video getVideo();
Article getArticle();
}
package tech.selinux.design.pattern.creational.abstractfactory;
public class JavaVideo extends Video {
@Override
public void produce() {
System.out.println("produce java");
}
}
package tech.selinux.design.pattern.creational.abstractfactory;
public class JavaArticle extends Article {
@Override
public void produce() {
System.out.println("Java 笔记");
}
}
package tech.selinux.design.pattern.creational.abstractfactory;
public class JavaCourseFactory implements CourseFactory {
@Override
public Video getVideo() {
return new JavaVideo();
}
@Override
public Article getArticle() {
return new JavaArticle();
}
}
package tech.selinux.design.pattern.creational.abstractfactory;
public class PythonVideo extends Video {
@Override
public void produce() {
System.out.println("produce python");
}
}
package tech.selinux.design.pattern.creational.abstractfactory;
public class PythonArticle extends Article {
@Override
public void produce() {
System.out.println("Python 笔记");
}
}
package tech.selinux.design.pattern.creational.abstractfactory;
public class PythonCourseFactory implements CourseFactory {
@Override
public Video getVideo() {
return new PythonVideo();
}
@Override
public Article getArticle() {
return new PythonArticle();
}
}
package tech.selinux.design.pattern.creational.abstractfactory;
public class Test {
public static void main(String[] args) {
CourseFactory courseFactory = new JavaCourseFactory();
Video video = courseFactory.getVideo();
Article article = courseFactory.getArticle();
video.produce();
article.produce();
}
}