设计模式之外观模式

定义

外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易地使用。

类图

这里写图片描述

实现,外观模式涉及到的角色

外观(Facade)角色:客户端直接调用这个角色的方法,该角色知道哪些子系统类负责处理请求,将客户的请求代理给适当的子系统对象。

子系统(SubSystem)角色:子系统角色集合实现子系统的功能,处理 Facade 对象指派的任务。注意子类中没有 Facade 的任何信息,即没有对 Facade 对象的引用。

实例

外观类Facade

/**
 * 外观模式:门面类
 */
public class Facade {
    private SubModuleA subModuleA;
    private SubModuleB subModuleB;
    private SubModuleC subModuleC;
    public Facade() {
        this.subModuleA = new SubModuleA();
        this.subModuleB = new SubModuleB();
        this.subModuleC = new SubModuleC();
    }
    public void testFacade() {
        subModuleA.methodA();
        subModuleB.methodB();
        subModuleC.methodC();
    }
}

子系统(SubSystem)集合中的类A SubModuleA

/**
 * 外观模式:子系统A
 */
public class SubModuleA {
    public void methodA() {
        System.out.println("子系统 SubModuleA 的方法 methodA 被调用!");
    }
}

子系统(SubSystem)集合中的类B SubModuleB

/**
 * 外观模式:子系统B
 */
public class SubModuleB {
    public void methodB() {
        System.out.println("子系统 SubModuleB 的方法 methodB 被调用!");
    }
}

子系统(SubSystem)集合中的类C SubModuleC

/**
 * 外观模式:子系统C
 */
public class SubModuleC {
    public void methodC() {
        System.out.println("子系统 SubModuleC 的方法 methodC 被调用!");
    }
}

客户端(Client)测试类 TestFacadePattern

/**
 * 外观模式:客户端测试类
 */
public class TestFacadePattern {
    public static void main(String[] args) {
        Facade facade = new Facade();
        facade.testFacade();
    }
}
外观模式设计原则

外观模式创建一个接口简化统一的类,用来包装其他子系统中一个或多个复杂的类,通过这个模式,可以认识到另一个OO原则:最少知识原则,即只和你的密友谈话。

这个原则希望我们在设计中,不要让太多的类耦合在一起,免得修改系统中一部分,会影响到其他部分。如果许多类之间相互依赖,那么这个系统就会变成一个易碎的系统,需要许多的维护成本。

总结,优点
  1. 松散耦合:外观模式松散了客户端与子系统的耦合关系,让子系统内部的模块能更容易扩展和维护。
  2. 简单易用:外观模式让子系统更加易用,客户端不再需要了解子系统内部的实现,也不需要跟众多子系统内部的模块进行交互,只需要跟门面类交互就可以了。
  3. 更好的划分访问层次:通过合理使用Facade,可以帮助我们更好地划分访问的层次。有些方法是对系统外的,有些方法是系统内部使用的。把需要暴露给外部的功能集中到门面中,这样既方便客户端使用,也很好地隐藏了内部的细节。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值