美文网首页设计模式
外观模式(Facede)

外观模式(Facede)

作者: 秀儿2020 | 来源:发表于2020-07-22 09:37 被阅读0次

定义

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

本质

封装交互,简化调用。

登场角色

  • Facede(窗口)

    定义子系统的多个模块对外的高层接口,通常需要调用内部多个模块,从而把客户的请求代理给适当的子系统对象。

  • 模块

    接收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("挂断");
    }
}


public interface Camera {
    void open();
    void takePicture();
    void close();
}


public class SamsungCamera implements Camera{
    @Override
    public void open() {
        System.out.println("打开相机");
    }

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

    @Override
    public void close() {
        System.out.println("关闭相机");
    }
}



public class MobilePhone {
    private Phone phone = new PhoneImpl();
    private Camera camera = new SamsungCamera();

    public void dail(){
        phone.dail();
    }

    public void videoChat(){
        camera.open();
        phone.dail();
    }

    public void hangup(){
        phone.hangup();
    }

    public void takePickture(){
        camera.open();
        camera.takePicture();
    }

    public void closeCamera(){
        camera.close();
    }
}

public class Main {
    public static void main(String[] args){
        MobilePhone mobilePhone = new MobilePhone();
        System.out.println("=======拍照=======");
        mobilePhone.takePickture();
        System.out.println("=======视频通话=======");
        mobilePhone.videoChat();
    }
}

运行结果

=======拍照=======
打开相机
拍照
=======视频通话=======
打开相机
拨号

功能

提供统一的封装接口,将子系统的逻辑、交互隐藏起来,为用户提供一个高层次的接口,使得系统更加易用,同事也对外隐藏了具体的实现,这样即使子系统发生了改变,用户也不会感知到,因为用户使用的是高层接口,内部的变化对用户不可见。

优点

  • 松散耦合,松散了客户端和子系统的耦合关系。
  • 简单易用,客户端不需要了解子系统内部的实现,也不需要跟子系统内部的多个模块进行交互,只需要更外观交互即可。
  • 更好的划分访问的层次。有些方法是对系统外开放的,有些方法是仅对系统内使用的,使用外观模式可以将可对外调用的功能集中到外观模式中,也很好的隐藏了实现的细节。

缺点

  • 过多的或者不太合理的Facede或让人疑惑,到底是调用外观呢还是直接调用内部实现呢。

何时使用

  • 为一个复杂的子系统提供一个简单的接口。
  • 当你需要构建一个层次结构的子系统时,使用外观模式定义子系统中每层的入口点。如果子系统之间是相互依赖的,可以让他们仅通过外观模式相互调用,简化他们之间的依赖关系。

相关文章

网友评论

    本文标题:外观模式(Facede)

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