设计模式之门面模式

一、定义

   要求一个子系统与其它系统信息的交互必须通过一个统一的类来进行,这个类就是门面类。在一个子系统里面,这种门面类可能不止一个,但是每一个门面类都只是向外界提供子系统中类的访问方法。

二、实例

    我们一定去邮局寄过东西,现在的邮局功能很多,跨国邮件、大型邮件、快件等等各种功能,每一种功能邮局里都有相对应的窗口进行服务。我们不需要知道哪些窗口是怎么工作的,邮局的人是怎么包东西、怎么寄东西的,我们只要把东西和必要信息给窗口的工作人员就行了,这里的各种窗口就相当于门面模式中的门面类。我们来模拟一下上面的这个场景。
    先定义一个邮局发送信件的接口,其中,只有sendWritter是高层模块能够调用的,其他方法都是只能在子系统中调用。
public interface ISendmail {
 public void setInfo(Object object,String address);
 public void packageing();
 public void send();
 public void sendWritter(Object object,String address);
}
    实现邮局类
public class EMS implements ISendmail{
 @Override
 public void setInfo(Object object, String address) {
  System.out.println("邮件内容:"+object.toString()+"目的地址:"+address);
 }
 @Override
 public void packageing() {
  System.out.println("打包");
 }
 @Override
 public void send() {
  System.out.println("发送邮件");
 }
 @Override
 public void sendWritter(Object object, String address) {
  this.setInfo(object, address);
  this.packageing();
  this.send();
 }

}
    邮局开放的窗口
public class EMSWindow {
 private EMS ems = null ;
 public EMSWindow() {
  this.ems = new EMS();
 }
 public void sendWritter(Object object,String address) {
  this.ems.sendWritter(object, address);
 }
}
    测试类
public class Test {
 public static void main(String[] args) {
  EMSWindow emsWindow = new EMSWindow();
  emsWindow.sendWritter("苹果", "njust");
 }
}
    结果
邮件内容:苹果目的地址:njust
打包
发送邮件

三、本质

    我觉得门面模式的本质就是将对其它系统提供功能的类或函数放到一起,也就是说把子系统的功能封装到一个类里面。
在上面的例子中,门面类对外提供了sendWritter函数作为子系统对外提供的功能,不管邮局的人怎么传递你的邮件,飞机、火车、汽车、轮船、量子传送门等等,你只要把该给的信息给他就行了。

四、注意

门面类不应该参与子系统业务逻辑,也就是说门面类只能对外提供接口函数,但是这个函数里面的内容也只不过是调用子系统中某个类的某个函数而已。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值