美文网首页
外观模式(简化一群类的接口)

外观模式(简化一群类的接口)

作者: 钉某人 | 来源:发表于2017-11-17 13:19 被阅读0次
    源码地址 https://github.com/DingMouRen/DesignPattern
    外观模式.png
    • Facade系统对外统一接口,
    • SystemA SystemB SystemC子系统接口
    定义

    外观模式为子系统的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。

    使用场景
    • 为一个复杂子系统提供一个简单的接口。(引入的第三方SDK)
    • 在构建一个有层次结构的子系统时
    协作

    客户端通过发送请求给Facade的方式与子系统通讯,Facade将这些消息转发给适当的子系统对象。尽管是子系统在做实际工作,但是Facade模式本身必须将它的接口转换成子系统的接口

    举个栗子

    假设我们手机只能打电话和拍照。那么通过系统和拍照系统就是所谓的子系统,里面有复杂的逻辑,但是我们不可能去搞懂系统的细节,我们只要能打电话和拍照就行了,我们需要一个外观类帮我们做一些事情,也就是封装,你手里拿着的手机哦。

    //子系统的抽象接口:通话系统
    public interface Phone {
        //打通话系统
        void dail();
        //关闭通话系统
        void hangup();
    }
    //通话系统的具体实现类
    public class PhoneImpl implements Phone {
        @Override
        public void dail() {
            System.out.println("通话系统的打电话功能");
        }
    
        @Override
        public void hangup() {
            System.out.println("通话系统的关闭通话");
        }
    }
    
    
    //Facade类:外观类
    public class MobilePhone {
        private Phone phone = new PhoneImpl();
        private Camera camera = new SonyCamera();
    
        //用手机打电话
        public void dail(){
            phone.dail();
        }
        //挂断电话
        public void hangup(){
            phone.hangup();
        }
        //用手机拍照片
        public void takePhoto(){
            camera.open();
            camera.takePhoto();
        }
        //退出相机
        public void closeCamera(){
            camera.close();
        }
    }
    
    
    使用
       public static void main(String[] args) {
            //拿到手机对象
            MobilePhone phone = new MobilePhone();
            //随便打电话或者去拍照
            phone.takePhoto();
        }
    
    总结

    优点:

    • 对客户端隐藏子系统的细节,减少客户对子系统的耦合
    • 外观类对子系统的接口封装,使得系统易于使用
      缺点:
    • 一般会造成外观类的接口膨胀,外观类的api接口很多,增加用户的使用成本
    • 外观类没遵循开闭原则,当业务变化时,可能需要直接修改外观类

    相关文章

      网友评论

          本文标题:外观模式(简化一群类的接口)

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