工厂方法
This commit is contained in:
@@ -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();
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package top.fjy8018.designpattern.pattern.creational.factorymethod;
|
||||||
|
|
||||||
|
import sun.misc.Launcher;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中
|
||||||
|
* 工厂方法抽象类,只提供契约,对于已知的逻辑可以提供默认实现
|
||||||
|
* <p>
|
||||||
|
* 提高产品与产品族的拓展性
|
||||||
|
* <p>
|
||||||
|
* 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();
|
||||||
|
}
|
||||||
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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视频");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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视频");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user