1.外观模式,对外提供统一的接口,有很多类,我们处理起来,他们的关系可能错综复杂,所以我们建立一个窗口,这个窗口完成一些交互任务,我们的客服端只是需要与这个窗口打交道就可以了。
2.代码示例:
Main 客服端
PageMaker 窗口
HtmlWriter Database 可能用到的类。
即是PageMaker不干具体的体力活,它直观调用别人,让别人干事情。
package com.pagemaker;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Properties;
class Database {
private Database() {
}
public static Properties getProperties(String dbname) {
String filename = dbname + ".txt";
Properties prop = new Properties();
try {
prop.load(new FileInputStream(filename));
} catch (IOException e) {
System.out.println("Warning: " + filename + "is not found.");
}
return prop;
}
}
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("<hl>" + title + "</hl>\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 mainlto(String mailaddr, String username) throws IOException {
link("mailto: " + mailaddr, username);
}
public void close() throws IOException {
writer.write("</body>");
writer.write("</html>\n");
writer.close();
}
}
class PageMaker {
public 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("huan ying lai dao" + username + "de wang ye.");
writer.paragraph("deng ni lai xin o");
writer.mainlto(mailaddr, username);
writer.close();
System.out.println(filename + "is created for " + mailaddr + "(" + username + ")");
} catch (IOException e) {
e.printStackTrace();
}
}
}
public class Main {
public static void main(String[] args) {
PageMaker.makeWelcomePage("zhuyuanxx@126.com", "welcome.html");
}
}
这个示例中用到了Properties这个类,要在本地建立一个maildata.txt的属性文件,prop.load()会导入这些属性。比如里面写上zhuyuanxxx@122.com= zhuyuan等类似的属性。