Skip to content

Commit

Permalink
abstract factory review
Browse files Browse the repository at this point in the history
  • Loading branch information
sunwng committed May 9, 2023
1 parent 1efaa22 commit 8feb8cc
Show file tree
Hide file tree
Showing 25 changed files with 288 additions and 118 deletions.
5 changes: 0 additions & 5 deletions src/creational/abstract_factory/Army.java

This file was deleted.

5 changes: 0 additions & 5 deletions src/creational/abstract_factory/Castle.java

This file was deleted.

10 changes: 0 additions & 10 deletions src/creational/abstract_factory/ElfArmy.java

This file was deleted.

10 changes: 0 additions & 10 deletions src/creational/abstract_factory/ElfCastle.java

This file was deleted.

10 changes: 0 additions & 10 deletions src/creational/abstract_factory/ElfKing.java

This file was deleted.

18 changes: 0 additions & 18 deletions src/creational/abstract_factory/ElfKingdomFactory.java

This file was deleted.

5 changes: 0 additions & 5 deletions src/creational/abstract_factory/King.java

This file was deleted.

7 changes: 0 additions & 7 deletions src/creational/abstract_factory/KingdomFactory.java

This file was deleted.

10 changes: 0 additions & 10 deletions src/creational/abstract_factory/OrcArmy.java

This file was deleted.

10 changes: 0 additions & 10 deletions src/creational/abstract_factory/OrcCastle.java

This file was deleted.

10 changes: 0 additions & 10 deletions src/creational/abstract_factory/OrcKing.java

This file was deleted.

18 changes: 0 additions & 18 deletions src/creational/abstract_factory/OrcKingdomFactory.java

This file was deleted.

23 changes: 23 additions & 0 deletions src/creational/abstract_factory/divfactory/DivFactory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package creational.abstract_factory.divfactory;

import creational.abstract_factory.factory.Factory;
import creational.abstract_factory.factory.Link;
import creational.abstract_factory.factory.Page;
import creational.abstract_factory.factory.Tray;

public class DivFactory extends Factory {
@Override
public Link createLink(String caption, String url) {
return new DivLink(caption, url);
}

@Override
public Tray createTray(String caption) {
return new DivTray(caption);
}

@Override
public Page createPage(String title, String author) {
return new DivPage(title, author);
}
}
14 changes: 14 additions & 0 deletions src/creational/abstract_factory/divfactory/DivLink.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package creational.abstract_factory.divfactory;

import creational.abstract_factory.factory.Link;

public class DivLink extends Link {
public DivLink(String caption, String url) {
super(caption, url);
}

@Override
public String makeHTML() {
return "<div class=\"LINK\"><a href=\"" + url + "\">" + caption + "</a></div>\n";
}
}
33 changes: 33 additions & 0 deletions src/creational/abstract_factory/divfactory/DivPage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package creational.abstract_factory.divfactory;

import creational.abstract_factory.factory.Item;
import creational.abstract_factory.factory.Page;

public class DivPage extends Page {
public DivPage(String title, String author) {
super(title, author);
}

@Override
public String makeHTML() {
StringBuilder sb = new StringBuilder();
sb.append("<!DOCTYPE html>\n");
sb.append("<html><head><title>");
sb.append(title);
sb.append("</title><style>\n");
sb.append("div.TRAY { padding:0.5em; margin-left:5em; border:1px solid black; }\n");
sb.append("div.LINK { padding:0.5em; background-color: lightgray; }\n");
sb.append("</style></head><body>\n");
sb.append("<h1>");
sb.append(title);
sb.append("</h1>\n");
for (Item item: content) {
sb.append(item.makeHTML());
}
sb.append("<hr><address>");
sb.append(author);
sb.append("</address>\n");
sb.append("</body></html>\n");
return sb.toString();
}
}
24 changes: 24 additions & 0 deletions src/creational/abstract_factory/divfactory/DivTray.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package creational.abstract_factory.divfactory;

import creational.abstract_factory.factory.Item;
import creational.abstract_factory.factory.Tray;

public class DivTray extends Tray {
public DivTray(String caption) {
super(caption);
}

@Override
public String makeHTML() {
StringBuilder sb = new StringBuilder();
sb.append("<p><b>");
sb.append(caption);
sb.append("</b></p>\n");
sb.append("<div class=\"TRAY\">");
for (Item item: tray) {
sb.append(item.makeHTML());
}
sb.append("</div>\n");
return sb.toString();
}
}
21 changes: 21 additions & 0 deletions src/creational/abstract_factory/factory/Factory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package creational.abstract_factory.factory;

public abstract class Factory {

public static Factory getFactory(String classname) {
Factory factory = null;
try {
factory = (Factory) Class.forName(classname).getDeclaredConstructor().newInstance();
} catch (Exception e) {
System.out.println(e.getMessage());
}
return factory;
}

public abstract Link createLink(String caption, String url);

public abstract Tray createTray(String caption);

public abstract Page createPage(String title, String author);

}
11 changes: 11 additions & 0 deletions src/creational/abstract_factory/factory/Item.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package creational.abstract_factory.factory;

public abstract class Item {
protected String caption;

public Item(String caption) {
this.caption = caption;
}

public abstract String makeHTML();
}
11 changes: 11 additions & 0 deletions src/creational/abstract_factory/factory/Link.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package creational.abstract_factory.factory;

public abstract class Link extends Item {

protected String url;

public Link(String caption, String url) {
super(caption);
this.url = url;
}
}
35 changes: 35 additions & 0 deletions src/creational/abstract_factory/factory/Page.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package creational.abstract_factory.factory;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.util.List;

public abstract class Page {

protected String title;
protected String author;
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) {
try {
Files.writeString(Path.of(filename), makeHTML(), StandardOpenOption.CREATE,
StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.WRITE);
} catch (IOException e) {
e.printStackTrace();
}
}

public abstract String makeHTML();
}
17 changes: 17 additions & 0 deletions src/creational/abstract_factory/factory/Tray.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package creational.abstract_factory.factory;

import java.util.ArrayList;
import java.util.List;

public abstract class Tray extends Item {

protected List<Item> tray = new ArrayList<>();

public Tray(String caption) {
super(caption);
}

public void add(Item item) {
tray.add(item);
}
}
24 changes: 24 additions & 0 deletions src/creational/abstract_factory/listfactory/ListFactory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package creational.abstract_factory.listfactory;

import creational.abstract_factory.factory.Factory;
import creational.abstract_factory.factory.Link;
import creational.abstract_factory.factory.Page;
import creational.abstract_factory.factory.Tray;

public class ListFactory extends Factory {

@Override
public Link createLink(String caption, String url) {
return new ListLink(caption, url);
}

@Override
public Tray createTray(String caption) {
return new ListTray(caption);
}

@Override
public Page createPage(String title, String author) {
return new ListPage(title, author);
}
}
15 changes: 15 additions & 0 deletions src/creational/abstract_factory/listfactory/ListLink.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package creational.abstract_factory.listfactory;

import creational.abstract_factory.factory.Link;

public class ListLink extends Link {

public ListLink(String caption, String url) {
super(caption, url);
}

@Override
public String makeHTML() {
return " <li><a href=\"" + url + "\">" + caption + "</a></li>\n";
}
}
Loading

0 comments on commit 8feb8cc

Please sign in to comment.