设计模式--外观模式

  1. 外观模式的目的在于如何简化接口,可以将多个类的复杂的一切隐藏在背后,值显露一个干净美观的外观。

  2. 所谓的外观模式就是提供一个统一的接口,用来访问子系统中的一群接口。

  3. 外观模式定义了一个高级接口,让子系统更容易使用,

  4. 外观模式的UML图

    在这里插入图片描述

  5. 外观模式的代码实现

    1. 创建3个子部件

      /**
       * 子系统角色:空调
       */
      public class Air {
      
          public void open(){
              System.out.println("开空调");
          }
      
          public void shutDown(){
              System.out.println("关空调");
          }
      }
      
      /**
       * 子系统角色:灯
       */
      public class Light {
      
          public void open(){
              System.out.println("开灯");
          }
      
          public void shutDown(){
              System.out.println("关灯");
          }
      }
      
      /**
       * 子系统角色:电视
       */
      public class Tv {
      
          public void open(){
              System.out.println("开电视");
          }
      
          public void shutDown(){
              System.out.println("关电视");
          }
      }
      
    2. 创建外观类

      /**
       * 包装了子部件,隐藏了子部件
       */
      public class Facade {
      
          private Air air;
          private Tv tv;
          private Light light;
      
          public Facade(Air air, Tv tv, Light light) {
              this.air = air;
              this.tv = tv;
              this.light = light;
          }
      
          //一键打开
          public void allOpen(){
              air.open();
              tv.open();
              light.open();
          }
      
          public void allDown(){
              air.shutDown();
              tv.shutDown();
              light.shutDown();
          }
      
      }
      
    3. 创建测试类

      public class Test {
          public static void main(String[] args) {
              Air air = new Air();
              Tv tv = new Tv();
              Light light = new Light();
      
              Facade facade = new Facade(air, tv, light);
              facade.allOpen();
              facade.allDown();
          }
      }
      
  6. 外观模式的优点

    1. 使客户对系统的使用变简单了,减少了与子系统的关联对象,实现了子系统与客户之间的松耦合关系。
    2. 只是提供了一个访问子系统的统一入口,并不影响用户直接使用子系统类
    3. 降低了大型软件系统中的编译依赖性,并简化了系统在不同平台之间的移植过程
  7. 外观模式的缺点

    1. 不能很好的限制客户使用子系统类,如果对客户访问子系统做太多的限制会减少系统的可变性和灵活性
    2. 在不映入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户类端的源代码,违背了”开闭原则“
  8. 外观模式的使用场景

    1. 当要为一个复杂子系统提供一个简单接口时可以使用外观模式
    2. 客户端与多个子系统之间存在很大的依赖性,引入外观模式将子系统与客户以及其他子系统解耦,可以提高子系统的独立性和可移植性。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值