From 739e9e0b5e3ce660ab31837ea9274be466a9bf28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=E5=98=89=E9=98=B3?= Date: Sun, 23 Sep 2018 22:42:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E5=8E=82=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../factorymethod/AbstractVideo.java | 11 ++++++++++ .../factorymethod/AbstractVideoFactory.java | 21 +++++++++++++++++++ .../JavaAbstractVideoFactory.java | 12 +++++++++++ .../creational/factorymethod/JavaVideo.java | 17 +++++++++++++++ .../PythonAbstractVideoFactory.java | 12 +++++++++++ .../creational/factorymethod/PythonVideo.java | 17 +++++++++++++++ .../AbstractVideoFactoryTest.java | 12 +++++++++++ 7 files changed, 102 insertions(+) create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/creational/factorymethod/AbstractVideo.java create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/creational/factorymethod/AbstractVideoFactory.java create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/creational/factorymethod/JavaAbstractVideoFactory.java create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/creational/factorymethod/JavaVideo.java create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/creational/factorymethod/PythonAbstractVideoFactory.java create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/creational/factorymethod/PythonVideo.java create mode 100644 src/test/java/top/fjy8018/designpattern/pattern/creational/factorymethod/AbstractVideoFactoryTest.java diff --git a/src/main/java/top/fjy8018/designpattern/pattern/creational/factorymethod/AbstractVideo.java b/src/main/java/top/fjy8018/designpattern/pattern/creational/factorymethod/AbstractVideo.java new file mode 100644 index 0000000..070fa52 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/creational/factorymethod/AbstractVideo.java @@ -0,0 +1,11 @@ +package top.fjy8018.designpattern.pattern.creational.factorymethod; + +/** + * 工厂方法 + * + * @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/factorymethod/AbstractVideoFactory.java b/src/main/java/top/fjy8018/designpattern/pattern/creational/factorymethod/AbstractVideoFactory.java new file mode 100644 index 0000000..984ba08 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/creational/factorymethod/AbstractVideoFactory.java @@ -0,0 +1,21 @@ +package top.fjy8018.designpattern.pattern.creational.factorymethod; + +import sun.misc.Launcher; + +import java.util.Collection; + +/** + * 定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中 + * 工厂方法抽象类,只提供契约,对于已知的逻辑可以提供默认实现 + *

+ * 提高产品与产品族的拓展性 + *

+ * JDK源码样例1:{@link java.net.URLStreamHandlerFactory#createURLStreamHandler(String)} -> {@link Launcher.Factory#createURLStreamHandler(String)} + * JDK源码样例2:{@link Collection#iterator()} + * + * @author F嘉阳 + * @date 2018-09-23 16:16 + */ +public abstract class AbstractVideoFactory { + public abstract AbstractVideo getVideo(); +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/creational/factorymethod/JavaAbstractVideoFactory.java b/src/main/java/top/fjy8018/designpattern/pattern/creational/factorymethod/JavaAbstractVideoFactory.java new file mode 100644 index 0000000..30d5e73 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/creational/factorymethod/JavaAbstractVideoFactory.java @@ -0,0 +1,12 @@ +package top.fjy8018.designpattern.pattern.creational.factorymethod; + +/** + * @author F嘉阳 + * @date 2018-09-23 20:11 + */ +public class JavaAbstractVideoFactory extends AbstractVideoFactory { + @Override + public AbstractVideo getVideo() { + return new JavaVideo(); + } +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/creational/factorymethod/JavaVideo.java b/src/main/java/top/fjy8018/designpattern/pattern/creational/factorymethod/JavaVideo.java new file mode 100644 index 0000000..1a5c7ba --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/creational/factorymethod/JavaVideo.java @@ -0,0 +1,17 @@ +package top.fjy8018.designpattern.pattern.creational.factorymethod; + +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/factorymethod/PythonAbstractVideoFactory.java b/src/main/java/top/fjy8018/designpattern/pattern/creational/factorymethod/PythonAbstractVideoFactory.java new file mode 100644 index 0000000..810bfc9 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/creational/factorymethod/PythonAbstractVideoFactory.java @@ -0,0 +1,12 @@ +package top.fjy8018.designpattern.pattern.creational.factorymethod; + +/** + * @author F嘉阳 + * @date 2018-09-23 20:11 + */ +public class PythonAbstractVideoFactory extends AbstractVideoFactory { + @Override + public AbstractVideo getVideo() { + return new PythonVideo(); + } +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/creational/factorymethod/PythonVideo.java b/src/main/java/top/fjy8018/designpattern/pattern/creational/factorymethod/PythonVideo.java new file mode 100644 index 0000000..6f46c58 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/creational/factorymethod/PythonVideo.java @@ -0,0 +1,17 @@ +package top.fjy8018.designpattern.pattern.creational.factorymethod; + +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/factorymethod/AbstractVideoFactoryTest.java b/src/test/java/top/fjy8018/designpattern/pattern/creational/factorymethod/AbstractVideoFactoryTest.java new file mode 100644 index 0000000..bd16759 --- /dev/null +++ b/src/test/java/top/fjy8018/designpattern/pattern/creational/factorymethod/AbstractVideoFactoryTest.java @@ -0,0 +1,12 @@ +package top.fjy8018.designpattern.pattern.creational.factorymethod; + +import org.junit.jupiter.api.Test; + +class AbstractVideoFactoryTest { + + @Test + void getVideo() { + AbstractVideoFactory factory = new JavaAbstractVideoFactory(); + factory.getVideo().produce(); + } +} \ No newline at end of file