外观模式

作者: OneXzgj | 来源:发表于2019-03-12 23:38 被阅读17次

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

    相关文章

      网友评论

        本文标题:外观模式

        本文链接:https://www.haomeiwen.com/subject/oysopqtx.html