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 ); + } +}