设计模式-结构型-外观模式

描述

  • 隐藏复杂的,难以理解的多个具体内部实现,提供一个一致的,容易理解的外部接口规范。

简易理解

  • 就是把一系列复杂的需相互配合的模块封装保护,对外保留一个简易的外观规范。
  • 比如:要操作电灯,电视。需要分步分别操作。
  • 可以定义一个小爱音箱(外观),不需要知道电灯,电视怎么操作了。只需要操作小爱音箱就可以了。

具体实现

public class Test {
    public static void main(String[] args) {
        XiaoaiSpeaker xiaoaiSpeaker = new XiaoaiSpeaker();
        xiaoaiSpeaker.say("打开所有设备");
        xiaoaiSpeaker.say("关闭所有设备");
    }
}

// 电灯
class ElectricLight {
    void open() {
        System.out.println("打开电灯");
    }
    void close() {
        System.out.println("关闭电灯");
    }
}

// 电视
class Television {
    void open() {
        System.out.println("打开电视");
    }
    void close() {
        System.out.println("关闭电视");
    }
}

// 小爱音箱
class XiaoaiSpeaker {
    private ElectricLight electricLight;
    private Television television;
    XiaoaiSpeaker() {
        electricLight = new ElectricLight();
        television = new Television();
    }

    void say(String word) {
        if (word.contains("打开")) {
            electricLight.open();
            television.open();
        } else if (word.contains("关闭")) {
            electricLight.close();
            television.close();
        } else {
            System.out.println("听不懂");
        }
    }
}

优点

  • 降低具体实现和客户端之间的耦合。
  • 客户只需要理解外部接口,无需关注具体实现,降低使用成本。
  • 符合迪米特法则。

缺点

  • 修改可能会改动原有代码和外观,不符合开闭原则。

使用场景

  • 子模块较为复杂时,可以定义一个外观层,供客户端使用。
  • 多层调用时,可为每一层定义外观层,去使用外观层,这样更改或切换具体实现,使用处不需要更改。
  • 客户端与多个系统之间存在联系,可使用外观层管理关系(网关)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值