结构型模式之外观模式(Facade Pattern)

面向对象编程的最大优势,在于它能防止应用程序成为混乱纠缠的小程序。

外观模式的意图是为子系统提供一个接口,便于它的使用。
一个外观就是一个类,它包含的功能介于工具包与完整的应用程序之间,为工具包或子系统的类提供了简单的用法。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值