设计模式(JAVA)——Facade模式

1. Facade模式

Facade模式将互相关联在一起的错综复杂的类整理出高层接口(API)

1.1 Facade模式的类图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xzUZk1lR-1574682752620)(./resources/image/15/15-1_Facade.png)]

登场角色:

  • Facade(正面,表面)
    Facade角色向系统外部提供高层接口(API)

  • 构成系统的许多其他角色
    系统中的各种角色组成复杂的关系

1.2 示例程序

类一览表

名字说明
Database获取数据的类
HtmlWriter编写HTML文件的类
PageMaker即Facade角色
Main测试类

类目录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0JkS9ZKb-1574682752623)(./resources/image/15/15-3.png)]

uml类图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zG7uzKpl-1574682752624)(./resources/image/15/15-2.png)]

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《设计模式》和结城浩的《图解设计模式》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值