master
星期八 5 years ago
parent c5f1b6fe03
commit e18be9842d
  1. 7
      pattern-abstractFactory/README.md
  2. 16
      pattern-abstractFactory/pattern-abstractFactory.iml
  3. 78
      pattern-abstractFactory/pom.xml
  4. 13
      pattern-abstractFactory/src/main/java/org/panda/App.java
  5. 26
      pattern-abstractFactory/src/main/java/org/panda/abstractFactory/Main.java
  6. 46
      pattern-abstractFactory/src/main/java/org/panda/abstractFactory/factory/Factory.java
  7. 24
      pattern-abstractFactory/src/main/java/org/panda/abstractFactory/factory/Item.java
  8. 18
      pattern-abstractFactory/src/main/java/org/panda/abstractFactory/factory/Link.java
  9. 50
      pattern-abstractFactory/src/main/java/org/panda/abstractFactory/factory/Page.java
  10. 29
      pattern-abstractFactory/src/main/java/org/panda/abstractFactory/factory/Tray.java
  11. 20
      pattern-abstractFactory/src/test/java/org/panda/AppTest.java

@ -0,0 +1,7 @@
抽象工厂模式
描述:将关键零件组装成产品
抽象工厂的工作是将"抽象零件"组建为"抽象产品"
我们不关心零件的具体实现,而是只关心接口,我们仅使用该接口将林间组建成为产品

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.11" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" />
</component>
</module>

@ -0,0 +1,78 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>pattern</artifactId>
<groupId>org.panda</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>pattern-abstractFactory</artifactId>
<name>pattern-abstractFactory</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>

@ -0,0 +1,13 @@
package org.panda;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}

@ -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/");
}
}

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

@ -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();
}

@ -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;
}
}

@ -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<Item> 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();
}

@ -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<Item> tray = new ArrayList();
public Tray(String caption) {
super(caption);
}
/**
* 提交零件
* @param item 零件抽象类
*/
public void add(Item item){
tray.add(item);
}
}

@ -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 );
}
}
Loading…
Cancel
Save