diff --git a/pattern-abstractFactory/README.md b/pattern-abstractFactory/README.md
new file mode 100644
index 0000000..8265251
--- /dev/null
+++ b/pattern-abstractFactory/README.md
@@ -0,0 +1,7 @@
+抽象工厂模式
+
+描述:将关键零件组装成产品
+
+抽象工厂的工作是将"抽象零件"组建为"抽象产品"
+
+我们不关心零件的具体实现,而是只关心接口,我们仅使用该接口将林间组建成为产品
\ No newline at end of file
diff --git a/pattern-abstractFactory/pattern-abstractFactory.iml b/pattern-abstractFactory/pattern-abstractFactory.iml
new file mode 100644
index 0000000..3f4fd58
--- /dev/null
+++ b/pattern-abstractFactory/pattern-abstractFactory.iml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pattern-abstractFactory/pom.xml b/pattern-abstractFactory/pom.xml
new file mode 100644
index 0000000..545814e
--- /dev/null
+++ b/pattern-abstractFactory/pom.xml
@@ -0,0 +1,78 @@
+
+
+
+
+ pattern
+ org.panda
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ pattern-abstractFactory
+
+ pattern-abstractFactory
+
+ http://www.example.com
+
+
+ UTF-8
+ 1.7
+ 1.7
+
+
+
+
+ junit
+ junit
+ 4.11
+ test
+
+
+
+
+
+
+
+
+ maven-clean-plugin
+ 3.1.0
+
+
+
+ maven-resources-plugin
+ 3.0.2
+
+
+ maven-compiler-plugin
+ 3.8.0
+
+
+ maven-surefire-plugin
+ 2.22.1
+
+
+ maven-jar-plugin
+ 3.0.2
+
+
+ maven-install-plugin
+ 2.5.2
+
+
+ maven-deploy-plugin
+ 2.8.2
+
+
+
+ maven-site-plugin
+ 3.7.1
+
+
+ maven-project-info-reports-plugin
+ 3.0.0
+
+
+
+
+
diff --git a/pattern-abstractFactory/src/main/java/org/panda/App.java b/pattern-abstractFactory/src/main/java/org/panda/App.java
new file mode 100644
index 0000000..5e4b9bf
--- /dev/null
+++ b/pattern-abstractFactory/src/main/java/org/panda/App.java
@@ -0,0 +1,13 @@
+package org.panda;
+
+/**
+ * Hello world!
+ *
+ */
+public class App
+{
+ public static void main( String[] args )
+ {
+ System.out.println( "Hello World!" );
+ }
+}
diff --git a/pattern-abstractFactory/src/main/java/org/panda/abstractFactory/Main.java b/pattern-abstractFactory/src/main/java/org/panda/abstractFactory/Main.java
new file mode 100644
index 0000000..f5440ac
--- /dev/null
+++ b/pattern-abstractFactory/src/main/java/org/panda/abstractFactory/Main.java
@@ -0,0 +1,26 @@
+package org.panda.abstractFactory;
+
+import org.panda.abstractFactory.factory.Factory;
+import org.panda.abstractFactory.factory.Link;
+
+/**
+ * @Author: qi
+ * @Description:
+ * @Date: Create in 9:35 PM 2019/5/25
+ */
+public class Main {
+
+ public static void main(String[] args) {
+ if (args.length!=1){
+ System.out.println("Usage: java Main class.name.of.ConcreteFactory");
+ System.out.println("Example 1: java Main listFactory.ListFactory");
+ System.out.println("Example 2: java Main tableFactory.TableFactory");
+ System.exit(0);
+ }
+ Factory factory = Factory.getFactory(args[0]);
+
+ Link people = factory.createLink("人民日报 ","http://www.people.com.cn/");
+ Link gmw = factory.createLink("光明日报","http://www.gmw.cn/");
+
+ }
+}
diff --git a/pattern-abstractFactory/src/main/java/org/panda/abstractFactory/factory/Factory.java b/pattern-abstractFactory/src/main/java/org/panda/abstractFactory/factory/Factory.java
new file mode 100644
index 0000000..7de11f4
--- /dev/null
+++ b/pattern-abstractFactory/src/main/java/org/panda/abstractFactory/factory/Factory.java
@@ -0,0 +1,46 @@
+package org.panda.abstractFactory.factory;
+
+/**
+ * @Author: qi
+ * @Description:抽象工厂
+ * @Date: Create in 10:00 PM 2019/5/25
+ */
+public abstract class Factory {
+
+ public static Factory getFactory(String className){
+ Factory factory = null;
+ try {
+ factory = (Factory) Class.forName(className).newInstance();
+ } catch (InstantiationException e) {
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ }
+ return factory;
+ }
+
+ /**
+ * 创建超链接类
+ * @param caption
+ * @param url
+ * @return
+ */
+ public abstract Link createLink(String caption,String url);
+
+ /**
+ * 创建托盘抽象类
+ * @param caption
+ * @return
+ */
+ public abstract Tray createTary(String caption);
+
+ /**
+ * 创建抽象产品
+ * @param title
+ * @param author
+ * @return
+ */
+ public abstract Page createPage(String title,String author);
+}
diff --git a/pattern-abstractFactory/src/main/java/org/panda/abstractFactory/factory/Item.java b/pattern-abstractFactory/src/main/java/org/panda/abstractFactory/factory/Item.java
new file mode 100644
index 0000000..14739c7
--- /dev/null
+++ b/pattern-abstractFactory/src/main/java/org/panda/abstractFactory/factory/Item.java
@@ -0,0 +1,24 @@
+package org.panda.abstractFactory.factory;
+
+/**
+ * @Author: qi
+ * @Description:零件抽象类
+ * @Date: Create in 9:38 PM 2019/5/25
+ */
+public abstract class Item {
+ /**
+ * 标题
+ */
+ protected String caption;
+
+ public Item(String caption) {
+ this.caption = caption;
+ }
+
+ /**
+ * 返回HTML文件内容(抽象类方法,需子类实现)
+ * @return
+ */
+ abstract String makeHtml();
+
+}
diff --git a/pattern-abstractFactory/src/main/java/org/panda/abstractFactory/factory/Link.java b/pattern-abstractFactory/src/main/java/org/panda/abstractFactory/factory/Link.java
new file mode 100644
index 0000000..f6d011a
--- /dev/null
+++ b/pattern-abstractFactory/src/main/java/org/panda/abstractFactory/factory/Link.java
@@ -0,0 +1,18 @@
+package org.panda.abstractFactory.factory;
+
+/**
+ * @Author: qi
+ * @Description:HTML的超链接类(抽象类)
+ * @Date: Create in 9:40 PM 2019/5/25
+ */
+public abstract class Link extends Item {
+ /**
+ * 超链接指向的地址
+ */
+ protected String url;
+
+ public Link(String caption,String url) {
+ super(caption);
+ this.url = url;
+ }
+}
diff --git a/pattern-abstractFactory/src/main/java/org/panda/abstractFactory/factory/Page.java b/pattern-abstractFactory/src/main/java/org/panda/abstractFactory/factory/Page.java
new file mode 100644
index 0000000..577ebb9
--- /dev/null
+++ b/pattern-abstractFactory/src/main/java/org/panda/abstractFactory/factory/Page.java
@@ -0,0 +1,50 @@
+package org.panda.abstractFactory.factory;
+
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Author: qi
+ * @Description:Html页面抽象类(抽象产品)
+ * @Date: Create in 9:50 PM 2019/5/25
+ */
+public abstract class Page {
+ /**
+ * 页面标题
+ */
+ protected String title;
+ /**
+ * 页面作者
+ */
+ protected String author;
+ /**
+ * 页面内容(抽象类item容器)
+ */
+ protected List- content = new ArrayList();
+
+ public Page(String title, String author) {
+ this.title = title;
+ this.author = author;
+ }
+
+ public void add(Item item){
+ content.add(item);
+ }
+
+ public void output(){
+ String fileName = title+".html";
+ try {
+ Writer writer = new FileWriter(fileName);
+ writer.close();
+ System.out.println(fileName+"编写完成.");
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ abstract String makeHtml();
+
+}
diff --git a/pattern-abstractFactory/src/main/java/org/panda/abstractFactory/factory/Tray.java b/pattern-abstractFactory/src/main/java/org/panda/abstractFactory/factory/Tray.java
new file mode 100644
index 0000000..e5d21da
--- /dev/null
+++ b/pattern-abstractFactory/src/main/java/org/panda/abstractFactory/factory/Tray.java
@@ -0,0 +1,29 @@
+package org.panda.abstractFactory.factory;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Author: qi
+ * @Description:Tary托盘类,包含多个Link和Tary类的容器
+ * @Date: Create in 9:45 PM 2019/5/25
+ */
+public abstract class Tray extends Item {
+
+ /**
+ * 零件容器
+ */
+ protected List
- tray = new ArrayList();
+
+ public Tray(String caption) {
+ super(caption);
+ }
+
+ /**
+ * 提交零件
+ * @param item 零件抽象类
+ */
+ public void add(Item item){
+ tray.add(item);
+ }
+}
diff --git a/pattern-abstractFactory/src/test/java/org/panda/AppTest.java b/pattern-abstractFactory/src/test/java/org/panda/AppTest.java
new file mode 100644
index 0000000..11406e3
--- /dev/null
+++ b/pattern-abstractFactory/src/test/java/org/panda/AppTest.java
@@ -0,0 +1,20 @@
+package org.panda;
+
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest
+{
+ /**
+ * Rigorous Test :-)
+ */
+ @Test
+ public void shouldAnswerWithTrue()
+ {
+ assertTrue( true );
+ }
+}