diff --git a/src/main/java/top/fjy8018/designpattern/pattern/creational/abstractfactory/AbstractArticle.java b/src/main/java/top/fjy8018/designpattern/pattern/creational/abstractfactory/AbstractArticle.java new file mode 100644 index 0000000..9070d63 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/creational/abstractfactory/AbstractArticle.java @@ -0,0 +1,11 @@ +package top.fjy8018.designpattern.pattern.creational.abstractfactory; + +/** + * 工厂方法 + * + * @author F嘉阳 + * @date 2018-09-23 16:13 + */ +public abstract class AbstractArticle { + public abstract void produce(); +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/creational/abstractfactory/AbstractVideo.java b/src/main/java/top/fjy8018/designpattern/pattern/creational/abstractfactory/AbstractVideo.java new file mode 100644 index 0000000..36b5343 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/creational/abstractfactory/AbstractVideo.java @@ -0,0 +1,11 @@ +package top.fjy8018.designpattern.pattern.creational.abstractfactory; + +/** + * 工厂方法 + * + * @author F嘉阳 + * @date 2018-09-23 16:13 + */ +public abstract class AbstractVideo { + public abstract void produce(); +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/creational/abstractfactory/CourseFactory.java b/src/main/java/top/fjy8018/designpattern/pattern/creational/abstractfactory/CourseFactory.java new file mode 100644 index 0000000..4aa03a2 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/creational/abstractfactory/CourseFactory.java @@ -0,0 +1,14 @@ +package top.fjy8018.designpattern.pattern.creational.abstractfactory; + +/** + * 抽象工厂:抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象 + * 使用抽象工厂易于扩展产品族 + * + * @author F嘉阳 + * @date 2018-09-23 22:43 + */ +public interface CourseFactory { + AbstractVideo video(); + + AbstractArticle article(); +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/creational/abstractfactory/JavaArticle.java b/src/main/java/top/fjy8018/designpattern/pattern/creational/abstractfactory/JavaArticle.java new file mode 100644 index 0000000..7e5ec34 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/creational/abstractfactory/JavaArticle.java @@ -0,0 +1,17 @@ +package top.fjy8018.designpattern.pattern.creational.abstractfactory; + +import lombok.extern.slf4j.Slf4j; + +/** + * 具体的产品 + * + * @author F嘉阳 + * @date 2018-09-23 16:13 + */ +@Slf4j +public class JavaArticle extends AbstractArticle { + @Override + public void produce() { + log.info("生产Java文章"); + } +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/creational/abstractfactory/JavaCourseFactory.java b/src/main/java/top/fjy8018/designpattern/pattern/creational/abstractfactory/JavaCourseFactory.java new file mode 100644 index 0000000..4589fc3 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/creational/abstractfactory/JavaCourseFactory.java @@ -0,0 +1,19 @@ +package top.fjy8018.designpattern.pattern.creational.abstractfactory; + +/** + * 从一个产品工厂生产出来的产品一定属于同一个族 + * + * @author F嘉阳 + * @date 2018-09-23 22:46 + */ +public class JavaCourseFactory implements CourseFactory { + @Override + public AbstractVideo video() { + return new JavaVideo(); + } + + @Override + public AbstractArticle article() { + return new JavaArticle(); + } +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/creational/abstractfactory/JavaVideo.java b/src/main/java/top/fjy8018/designpattern/pattern/creational/abstractfactory/JavaVideo.java new file mode 100644 index 0000000..53baa18 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/creational/abstractfactory/JavaVideo.java @@ -0,0 +1,17 @@ +package top.fjy8018.designpattern.pattern.creational.abstractfactory; + +import lombok.extern.slf4j.Slf4j; + +/** + * 具体的产品 + * + * @author F嘉阳 + * @date 2018-09-23 16:13 + */ +@Slf4j +public class JavaVideo extends AbstractVideo { + @Override + public void produce() { + log.info("生产Java视频"); + } +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/creational/abstractfactory/PythonArticle.java b/src/main/java/top/fjy8018/designpattern/pattern/creational/abstractfactory/PythonArticle.java new file mode 100644 index 0000000..2284cd1 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/creational/abstractfactory/PythonArticle.java @@ -0,0 +1,17 @@ +package top.fjy8018.designpattern.pattern.creational.abstractfactory; + +import lombok.extern.slf4j.Slf4j; + +/** + * 具体的产品 + * + * @author F嘉阳 + * @date 2018-09-23 16:13 + */ +@Slf4j +public class PythonArticle extends AbstractArticle { + @Override + public void produce() { + log.info("生产Python文章"); + } +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/creational/abstractfactory/PythonCourseFactory.java b/src/main/java/top/fjy8018/designpattern/pattern/creational/abstractfactory/PythonCourseFactory.java new file mode 100644 index 0000000..6f3051a --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/creational/abstractfactory/PythonCourseFactory.java @@ -0,0 +1,19 @@ +package top.fjy8018.designpattern.pattern.creational.abstractfactory; + +/** + * 从一个产品工厂生产出来的产品一定属于同一个族 + * + * @author F嘉阳 + * @date 2018-09-23 22:46 + */ +public class PythonCourseFactory implements CourseFactory { + @Override + public AbstractVideo video() { + return new PythonVideo(); + } + + @Override + public AbstractArticle article() { + return new PythonArticle(); + } +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/creational/abstractfactory/PythonVideo.java b/src/main/java/top/fjy8018/designpattern/pattern/creational/abstractfactory/PythonVideo.java new file mode 100644 index 0000000..5ad38eb --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/creational/abstractfactory/PythonVideo.java @@ -0,0 +1,17 @@ +package top.fjy8018.designpattern.pattern.creational.abstractfactory; + +import lombok.extern.slf4j.Slf4j; + +/** + * 具体的产品 + * + * @author F嘉阳 + * @date 2018-09-23 16:14 + */ +@Slf4j +public class PythonVideo extends AbstractVideo { + @Override + public void produce() { + log.info("生产Python视频"); + } +} diff --git a/src/test/java/top/fjy8018/designpattern/pattern/creational/abstractfactory/CourseFactoryTest.java b/src/test/java/top/fjy8018/designpattern/pattern/creational/abstractfactory/CourseFactoryTest.java new file mode 100644 index 0000000..0f5e5a7 --- /dev/null +++ b/src/test/java/top/fjy8018/designpattern/pattern/creational/abstractfactory/CourseFactoryTest.java @@ -0,0 +1,15 @@ +package top.fjy8018.designpattern.pattern.creational.abstractfactory; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class CourseFactoryTest { + + @Test + void test() { + CourseFactory factory = new JavaCourseFactory(); + factory.article().produce(); + factory.video().produce(); + } +} \ No newline at end of file