1. Facade模式
Facade模式将互相关联在一起的错综复杂的类整理出高层接口(API)
1.1 Facade模式的类图
登场角色:
-
Facade(正面,表面)
Facade角色向系统外部提供高层接口(API) -
构成系统的许多其他角色
系统中的各种角色组成复杂的关系
1.2 示例程序
类一览表
名字 | 说明 |
---|---|
Database | 获取数据的类 |
HtmlWriter | 编写HTML文件的类 |
PageMaker | 即Facade角色 |
Main | 测试类 |
类目录
uml类图
Database类
package xin.ajay.facade;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
public class Database {
private Database(){}
public static Properties getProperties(String dbname){
String filename = dbname + ".properties";
Properties prop = new Properties();
try {
prop.load(Database.class.getClassLoader().getResourceAsStream(filename));
} catch (IOException e) {
e.printStackTrace();
System.out.println("Warning: " + filename + " is not found.");
}
return prop;
}
}
HtmlWriter类
package xin.ajay.facade;
import java.io.IOException;
import java.io.Writer;
public class HtmlWriter {
private Writer writer;
public HtmlWriter(Writer writer) {
this.writer = writer;
}
public void title(String title) throws IOException {
writer.write("<html>");
writer.write("<head>");
writer.write("<title>" + title + "</title>");
writer.write("</head>");
writer.write("<body>\n");
writer.write("<h1>" + title +"</h1>\n");
}
public void paragraph(String msg) throws IOException {
writer.write("<p>" + msg +"</p>\n");
}
public void link(String href,String caption) throws IOException {
paragraph("<a href=\""+ href +"\">" +caption +"</a>");
}
public void mailto(String mailaddr,String username) throws IOException {
link("mailto:" + mailaddr,username);
}
public void close() throws IOException {
writer.write("</body>");
writer.write("</html>\n");
writer.close();
}
}
PageMaker类
package xin.ajay.facade;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;
public class PageMaker {
private PageMaker(){ }
public static void makeWelcomePage(String mailaddr,String filename){
try {
Properties mailprop = Database.getProperties("maildata");
String username = mailprop.getProperty(mailaddr);
HtmlWriter writer = new HtmlWriter(new FileWriter(filename));
writer.title("Welcome to " + username + "'s page");
writer.paragraph(username + "欢迎来到" + username +"的主页。");
writer.paragraph("等着你的邮件哦!");
writer.mailto(mailaddr,username);
writer.close();
System.out.println(filename + " is created for " + mailaddr + " (" + username + ")");
} catch (IOException e) {
e.printStackTrace();
}
}
}
测试类
package xin.ajay.facade;
public class Main {
public static void main(String[] args) {
PageMaker.makeWelcomePage("XXXX@XXX.com","welcome.html");
}
}
maildata.properties文件
XXXX@XXX.com=XXX
鸣谢
GoF《设计模式》和结城浩的《图解设计模式》