抽象工厂
This commit is contained in:
@@ -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();
|
||||||
|
}
|
||||||
@@ -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();
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package top.fjy8018.designpattern.pattern.creational.abstractfactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 抽象工厂:抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个<strong>产品族</strong>中的产品对象
|
||||||
|
* 使用抽象工厂易于扩展产品族
|
||||||
|
*
|
||||||
|
* @author F嘉阳
|
||||||
|
* @date 2018-09-23 22:43
|
||||||
|
*/
|
||||||
|
public interface CourseFactory {
|
||||||
|
AbstractVideo video();
|
||||||
|
|
||||||
|
AbstractArticle article();
|
||||||
|
}
|
||||||
@@ -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文章");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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视频");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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文章");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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视频");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user