master
parent
c5f1b6fe03
commit
e18be9842d
11 changed files with 327 additions and 0 deletions
@ -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…
Reference in new issue