声明: 此文章仅限于记录学习之用 , 受限于自身水平和理解能力 , 因此结论可能是不正确的. 如果您需要学习,建议参考其他文章
介绍
比如你在启动电脑时,只需要按一下开关就可以使用了.
电脑内部启动cpu,启动ram,启动rom,加载系统…这些不需要关心.
开关就是外观模式,
下面用一张图来表达,外观模式干的什么
优点
调用者只需要关心要什么, 不需要关心内部实现.
使用场景
提供给第三方接口. 可以根据交互场景提供接口, 内部实现不需要对方知道. 更加清晰明了.
示例代码
下面以聚合支付为例.
1.定义支付接口
package com.demo;
/**
* 互联网支付
*/
public interface InternetPayMent {
/**
* 支付
* 演示模式, 无需在意类型
* @param money 金额
* @return 返回结果
*/
String pay(int money);
}
- 支付实现类
package com.demo;
/**
* @author Administrator
* @version 1.0
* @description: 支付宝
* @date 2023/11/3 10:28
*/
public class AliPay implements InternetPayMent{
@Override
public String pay(int money) {
return "欢迎使用支付宝, 本次支付:"+money+"元";
}
}
package com.demo;
/**
* @author Administrator
* @version 1.0
* @description: 微信支付
* @date 2023/11/3 10:28
*/
public class WeChatPay implements InternetPayMent{
@Override
public String pay(int money) {
return "欢迎使用微信支付, 本次支付:"+money+"元";
}
}
package com.demo;
/**
* @author Administrator
* @version 1.0
* @description: 云闪付
* @date 2023/11/3 10:28
*/
public class UnionPay implements InternetPayMent{
@Override
public String pay(int money) {
return "欢迎使用云闪付, 本次支付:"+money+"元";
}
}
3.外观模式
package com.demo;
/**
* @author Administrator
* @version 1.0
* @description: 外观模式
* @date 2023/11/3 10:56
*/
public class PanmentPayFacade {
private AliPay aliPay;
private WeChatPay weChatPay;
private UnionPay unionPay;
public PanmentPayFacade(){
aliPay=new AliPay();
weChatPay=new WeChatPay();
unionPay=new UnionPay();
}
public String payByAliPay(int money){
return aliPay.pay(money);
}
public String payByWeChatPay(int money){
return weChatPay.pay(money);
}
public String payByUnionPay(int money){
return unionPay.pay(money);
}
}
4.测试类
package com.demo;
/**
* @author Administrator
* @version 1.0
* @description:
* @date 2023/11/3 11:04
*/
public class Main {
public static void main(String[] args) {
PanmentPayFacade panmentPayFacade = new PanmentPayFacade();
System.out.println(panmentPayFacade.payByAliPay(200));
System.out.println(panmentPayFacade.payByUnionPay(200));
System.out.println(panmentPayFacade.payByWeChatPay(20));
}
}
总结
外观模式就是在原来的基础上, 又包了一层, 这以层负责将需要调用的服务集合在一块, 这样做降低了代码的复杂性,提高了灵活性.
参考资料
https://refactoringguru.cn/design-patterns/facade
https://www.runoob.com/design-pattern/facade-pattern.html
https://shusheng007.top/2021/09/08/facade-pattern/