设计模式学习笔记——外观(Facade)模式
来源:互联网 发布:嘉兴兼职淘宝美工 编辑:程序博客网 时间:2024/05/20 18:43
设计模式学习笔记——外观(Facade)模式
@(设计模式)[设计模式, 外观模式, facade]
- 设计模式学习笔记外观Facade模式
- 基本介绍
- 外观案例
- 类图
- 实现代码
- Database类
- maildatatxt
- HtmlWriter类
- PageMaker类
- 测试类
- 运行结果
- 控制台输出
- D盘下welcomehtml的内容
- 浏览器中运行结果
- 外观模式中的角色
- Facade窗口
- 构成系统的许多其他角色
- Client请求者
- 类图
基本介绍
外观模式其作用可以简单的理解为,为子模块(底层)抽出一个统一访问的接口,供父模块(上层)使用。
使用外观模式,调用者不需要知道底层的具体实现、逻辑是什么,只需要使用暴露出的接口就行了。使用外观模式并没有强制隐藏掉底层具体实现,也就是说,我们也可以直接调用底层的功能。
外观案例
类图
实现代码
Database类
package com.pc.facade.example;import java.io.FileInputStream;import java.util.Properties;/** * 数据库类 * Created by Switch on 2017/3/30. */public final class Database { private Database() { } /** * 根据数据哭名获取Properties * * @param dbName 数据库名 * @return Properties对象 */ public static Properties getProperties(String dbName) { String fileName = dbName + ".txt"; Properties prop = new Properties(); try { prop.load(new FileInputStream(fileName)); } catch (Exception e) { System.out.println("Warning: " + fileName + " is not found."); } return prop; }}
maildata.txt
switchvov@163.com=Switchbob@163.com=Bob
HtmlWriter类
package com.pc.facade.example;import java.io.IOException;import java.io.Writer;/** * Html编写类 * Created by Switch on 2017/3/30. */public class HtmlWriter { /** * 编写器 */ private Writer writer; /** * 构造方法,设置编写器 * * @param writer 编写器 */ public HtmlWriter(Writer writer) { this.writer = writer; } /** * 输出标题 * * @param title 标题 * @throws IOException IO异常 */ public void title(String title) throws IOException { writer.write("<html>"); writer.write("<head>"); writer.write("<title>" + title + "</title>"); writer.write("<meta charset='UTF-8'/>"); writer.write("</head>"); writer.write("<body>\n"); writer.write("<h1>" + title + "</h1>\n"); } /** * 输出段落 * * @param msg 信息 * @throws IOException IO异常 */ public void paragraph(String msg) throws IOException { writer.write("<p>" + msg + "</p>\n"); } /** * 输出超链接 * * @param href 链接 * @param caption 标题 * @throws IOException IO异常 */ public void link(String href, String caption) throws IOException { this.paragraph("<a href=\"" + href + "\">" + caption + "</a>"); } /** * 输出邮件地址 * * @param mailAddress 邮件地址 * @param userName 用户名 * @throws IOException IO异常 */ public void mailto(String mailAddress, String userName) throws IOException { link("mailto:" + mailAddress, userName); } /** * 结束输出HTML * * @throws IOException IO异常 */ public void close() throws IOException { writer.write("</body>"); writer.write("</html>\n"); writer.close(); }}
PageMaker类
package com.pc.facade.example;import java.io.FileWriter;import java.io.IOException;import java.util.Properties;/** * 页面Maker类 * Created by Switch on 2017/3/30. */public final class PageMaker { /** * 防止外部new出PageMaker的实例,所以声明为private方法 */ private PageMaker() { } /** * 创建欢迎页 * * @param mailAddress 邮箱地址 * @param filename 文件名 */ public static void makeWelcomePage(String mailAddress, String filename) { try { Properties mailprop = Database.getProperties(System.getProperty("user.dir") + "/src/main/java/com/pc/facade/example/maildata"); String username = mailprop.getProperty(mailAddress); HtmlWriter writer = new HtmlWriter(new FileWriter("D://" + filename)); writer.title("Welcome to " + username + "'s page!"); writer.paragraph("欢迎来到" + username + "的主页。"); writer.paragraph("等着你的邮件哦!"); writer.mailto(mailAddress, username); writer.close(); System.out.println(filename + " is created for " + mailAddress + " (" + username + ")"); } catch (IOException e) { e.printStackTrace(); } }}
测试类
package com.pc.facade.example.test;import com.pc.facade.example.PageMaker;import org.junit.Test;/** * PageMaker Tester. * * @author Switch * @version 1.0 */public class PageMakerTest { /** * 测试外观模式 */ @Test public void testPageMaker() { PageMaker.makeWelcomePage("switchvov@163.com", "welcome.html"); }}
运行结果
控制台输出
welcome.html is created for switchvov@163.com (Switch)
D盘下welcome.html的内容
<html><head><title>Welcome to Switch's page!</title><meta charset='UTF-8'/></head><body><h1>Welcome to Switch's page!</h1><p>欢迎来到Switch的主页。</p><p>等着你的邮件哦!</p><p><a href="mailto:switchvov@163.com">Switch</a></p></body></html>
浏览器中运行结果
外观模式中的角色
Facade(窗口)
Facade
角色是代表构成系统的许多其他角色的“简单窗口” 。Facade
角色向系统外部提供高层接口(API
)。在案例中,由PageMaker
类扮演此角色。
构成系统的许多其他角色
这些角色各自完成自己的工作,它们并不知道Facade
角色。Facade
角色调用其他角色进行工作,但是其他角色不会调用Facade
角色。在案例中,由Database
类和HtmlWriter
类扮演此角色。
Client(请求者)
Client
角色负责调用Facade
角色(在GoF
书(请参见附录E[GoF])中,Client
角色并不包含在Facade
模式中)。在案例中,由Main
类扮演此角色。
类图
GitHub:DesignPatternStudy
——————参考《图解设计模式》
0 0
- 设计模式学习笔记——外观(Facade)模式
- 设计模式学习笔记(十一)——Facade外观
- [设计模式学习笔记]FACADE外观模式
- 《设计模式》学习笔记--外观Facade
- 设计模式学习——外观模式(Facade)
- 设计模式学习—外观模式(Facade Design Pattern)
- Java设计模式学习—外观模式(Facade Pattern)
- 设计模式——外观模式(Facade)
- 【设计模式】—— 外观模式Facade
- 设计模式学习-Facade(外观)
- 《设计模式精解》学习笔记(四)——Facade(外观)模式
- 设计模式学习笔记(十一)——Facade外观模式
- 设计模式学习笔记(十一)——Facade外观模式
- 设计模式学习笔记十一(Facade外观模式)
- 设计模式学习笔记(一)--Facade外观模式
- 设计模式学习笔记(一)--Facade外观模式
- java 设计模式学习笔记七 facade外观模式
- 【设计模式】学习笔记10:外观模式(Facade)
- Semaphore 并发个数控制
- js 回调函数理解总结
- java 路径 批处理空格 getRuntime().exec 空格解决办法
- pads中pcb文件怎么转换为低版本
- CountDownLatch
- 设计模式学习笔记——外观(Facade)模式
- 少走弯路的10条忠告
- ajax请求错误返回status=0
- web程序在线更新实现
- POI操作Excel常用方法总结
- ReentrantReadWriteLock
- MongoDB数据库启动和停止
- 利用ReentrantReadWriteLock实现缓存系统
- Linux基础学习——unit9