面向对象编程的最大优势,在于它能防止应用程序成为混乱纠缠的小程序。
外观模式的意图是为子系统提供一个接口,便于它的使用。
一个外观就是一个类,它包含的功能介于工具包与完整的应用程序之间,为工具包或子系统的类提供了简单的用法。
jdk中的外观模式:
JOptionPane是java类库中少有的使用了外观模式的类,它通过一个简单的接口简化了JDialog的使用。JOptionPane不能算作UML中的工具类,因为根据UML定义工具类只能处理静态方法,充其量叫做外观模式的工具类。
public class MultiThread {
public static void main(String args[]) throws Exception {
Font font = new Font("Dialog", Font.PLAIN, 18);
UIManager.put("Button.font",font);
UIManager.put("Label.font",font);
int option;
do{
option = JOptionPane.showConfirmDialog(
null,"Had enough?","a stubborn dialog",JOptionPane.YES_NO_OPTION);
}while (option==JOptionPane.NO_OPTION);
}
}
在服务器后台应用程序开发中,通常采用分层的架构,比如Controller-Service-Dao。最近做的一个需求,卖家可以设置10个常用的物流公司来发货。当卖家更新常用物流公司时,我的做法是先把此卖家原来的数据删除,然后重新插入。Service层中的更新方法通过封装两个Dao层方法:删除和插入,暴露给Controller层使用,这里可以认为运用了外观模式,简化了Controller的操作。
mybatis 的SqlSession是一个接口,它类似于你们公司前台的美女客服,它扮演着门面的作用,而真正干活的时Executor接口,你可以认为它是公司的工程师。假设我是客户找你们公司干活,我只需要告诉前台的美女客服(SeqSession)我要什么信息(参数),要做什么东西,过段时间,她会将结果给我。在这个过程中,作为用户的我关心的是:
1.要给美女客服(SeqSession)什么信息(功能和参数)
2.美女客服会返回什么结果
而我不关心工程师(Executor)是怎么为我工作的,只要前台告诉工程师,工程师就知道如何为我工作,这个步骤对我而言是个黑箱操作。
Tomcat org.apache.catalina.connector包下的Request继承了HttpServletRequest,此类对象为传递给servlet的真实request,内部通过聚合包装了org.apache.coyote包下的Request类,此类为Tomcat的Connector连接器内部使用,封装了请求信息,如果将此类直接传递给servlet,程序代码可能会访问到一些内部操作,为了消除隐患,因此采用外观模式。– Tomcat7.0已经启用RequestFacade