JAVA设计模式之外观模式

外观模式

定义

为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层的接口,使得子系统更加容易实现

说明:“接口”为泛指模块对外开放的类

结构

在这里插入图片描述

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

**模块:**接受facade对象的委派,真正实现功能,各个模块之间可能有交互。

Facade对象知道各个模块,但各个模块不应该知道Facade对象。

代码

public interface AModel {
    public void testA();
}
public interface BModel {
    public void testB();
}
public interface CModel {
    public void testC();
}
public class AModelImpl implements AModel{
    @Override
    public void testA() {
        System.out.println("A模块测试testA方法");
    }
}
public class BModelImpl implements BModel{
    @Override
    public void testB() {
        System.out.println("B模块测试testB方法");
    }
}
public class CModelImpl implements CModel{
    @Override
    public void testC() {
        System.out.println("C模块测试testC方法");
    }
}
public class Facade {
    public  void test(){
        AModel aModel = new AModelImpl();
        BModel bModel = new BModelImpl();
        CModel cModel = new CModelImpl();
        aModel.testA();
        bModel.testB();
        cModel.testC();
    }
}
public class Client {
    public static void main(String[] args) {
        new Facade().test();
    }
}

目的

  1. 让外部减少与子系统内多个模块的交互,松散耦合,从而让外部能够更简单的使用子系统。
  2. 不改变原先功能,Facade方便客户端的调用、封装内部细节、实现功能的共享和复用。
  3. 有外观可以不使用。
  4. 外观提供了缺省的功能实现
    在这里插入图片描述

实现

  1. 把外观类当成一个辅助工具类实现
  2. Facade可以实现成为接口
  3. 有选择性的暴露接口方法,尽量减少模块对子系统外提供的接口方法

Facade的方法只是实现一个功能的组合调用

优缺点

  1. 松散耦合
  2. 简单易用
  3. 更好的划分访问层次(选择性暴露接口方法)
  4. 过多的或者不太合理的Facade也容易让人迷惑

本质

  1. 封装交互、简化调用
  2. 体现了“最少知识原则”

何时选用外观模式

  1. 希望复杂(指与客户端交互复杂)的子系统提供一个简单接口时,使用简化客户的使用。
  2. 让客户程序和抽象类的实现部分实现松散耦合,提高子系统的独立性和移植性。
  3. 构建多层结构系统,简化层间关系,松散层次之间的依赖关系。

本章节附带视频已上传

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值