设计模式(六)外观模式


更多设计模式文章请阅读:

设计模式专栏

1、定义:

  • 1.1 外观模式(Facade Pattern)
    即一个系统的外部与内部的通信必须通过一个统一的对象进行,将所有的功能,封装在一个类中,使得子系统更易于使用。

  • 1.2 作用
    隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。

  • 1.3 主要解决:
    降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。

2 、使用示例

以日常生活中例子作为参考,手机最开始则为相机功能,打电话功能,随着科技的进步,出现了视频通话,而在这个过程中,即要调用相机功能,有要调用打电话功能,所以出现微信这个门面,将打电话和打开相机录像等一系列操作,全都封装在视频通话这个功能里面,接下来以这个例子,来看看外观模式,是如何使用的。

UML建模图.jpg

  • 2.1 提供给客户端唯一的交互类
public class MobliePhone {

    private Phone mPhone=new PhoneImpl();
    private Camera mCamera=new CameraImpl();

    /**
     * 视频聊天
     */
    public void videoChat(){
        System.out.println("-->视频浏览");
        mCamera.open();
        mPhone.dail();
    }

    /**
     * 挂断电话
     */
    public void hangup(){
        mPhone.hangup();
    }


    /**
     * 拍照
     */
    public void takepic(){
        mCamera.open();
        mCamera.takepicture();
    }

    /**
     * 关闭相机
     */
    public void colseCamera(){
        mCamera.close();
    }
    
}
  • 2.2 打电话功能封装
public interface Phone {

    /**
     * 响铃
     */
    void dail();

    /**
     * 挂断
     */
    void hangup();

}
  • 2.3 电话功能具体实现:
public class PhoneImpl implements Phone {
    @Override
    public void dail() {
        System.out.println("打电话");
    }

    @Override
    public void hangup() {
        System.out.println("挂断");
    }
}
  • 2.4 照相功能定义
public interface Camera {
    /**
     * 打开相机
     */
    void open();

    /**
     * 拍照
     */
    void takepicture();

    /**
     * 关闭相机
     */
    void close();

}
  • 2.5 相机具体实现:
public class CameraImpl implements Camera {
    @Override
    public void open() {
        System.out.println("打开相机");
    }

    @Override
    public void takepicture() {
        System.out.println("拍照");

    }

    @Override
    public void close() {
        System.out.println("关闭相机");
    }
}
  • 2.6 客户端使用:
public class Test {
   public static void main(String[] args) {

       MobliePhone mobliePhone = new MobliePhone();

       mobliePhone.takepic();

       mobliePhone.videoChat();

       mobliePhone.colseCamera();

       mobliePhone.hangup();
   }
}

3、在来看看在Android外观模式:

如果你从事Android开发,肯定接触过图片加载框架Glide,在来看看外观模式在Glide中的使用。都知道Glide是一件非常优秀的图片加载框架,当然随着版本的迭代,功能非常的丰富,但是对于开发者使用,但是永远都是一句话简单。

  private final Engine engine;
  private final BitmapPool bitmapPool;
  private final MemoryCache memoryCache;
  private final BitmapPreFiller bitmapPreFiller;
  private final GlideContext glideContext;
  private final Registry registry;
  private final ArrayPool arrayPool;
  private final RequestManagerRetriever requestManagerRetriever;
  private final ConnectivityMonitorFactory connectivityMonitorFactory;
  private final List<RequestManager> managers = new ArrayList<>();
  private MemoryCategory memoryCategory = MemoryCategory.NORMAL;

从Glide中的源码可以看出,里面封装了特别多的功能,包括图片的缓存,请求队列的缓存池,垃圾回收机制等等,但是我们使用的话,仅仅简单的一句话。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值