A minimalistic approach would be: using an interface AutoCloseable:
Program prints
<body><strong> some text </strong><ol><li>a</li><li>b</li><li>c</li></ol></body>
online demo
public class Main {
public static void main(String args[]) {
Page page = new Page();
writeBody(page);
page.show();
}
static void writeBody(Page page) {
try (BodyTag bodyTag = new BodyTag(page)) {
writeText(page);
writeList(page);
}
}
static void writeText(Page page) {
try (StrongTag strongTag = new StrongTag(page)) {
strongTag.append(" some text ");
}
}
static void writeList(Page page) {
try (ListTag list = new ListTag(page)) {
for (char c=97; c<100; ++c) {
appendElem(page, String.valueOf(c));
}
}
}
static void appendElem(Page page, String elem) {
try (ListElem li = new ListElem(page)) {
li.append(elem);
}
}
}
class Page {
StringBuilder content = new StringBuilder();
void append(String text) {
content.append(text);
}
void show() {
System.out.println(content);
}
}
abstract class Tag implements AutoCloseable {
String name;
Page content;
Tag(Page parent, String tagName) {
name = tagName;
content = parent;
content.append("<");
content.append(name);
content.append(">");
}
public void append(String text) {
content.append(text);
}
@Override
final public void close() {
content.append("</");
content.append(name);
content.append(">");
}
}
final class StrongTag extends Tag {
public StrongTag(Page parent) {
super(parent, "strong");
}
}
final class BodyTag extends Tag {
public BodyTag(Page parent) {
super(parent, "body");
}
}
final class ListTag extends Tag {
public ListTag(Page parent) {
super(parent, "ol");
}
}
final class ListElem extends Tag {
public ListElem(Page parent) {
super(parent, "li");
}
}
Definitely not an idiot proof, but for simple purposes this may be a good start.
source
share