d8.1设计模式之外观模式

本文深入讲解外观模式(Facade),一种结构性设计模式,用于隐藏系统复杂性并向客户端提供统一的访问接口。通过实例演示如何重构代码,创建业务逻辑封装,以及创建门面接口,展现其在系统设计中的应用和优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.什么是外观模式

外观模式(Facade),他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构性模式。为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用。

2.外观模式(门面) 包装模式

在这里插入图片描述

实例1:

在这里插入图片描述
// 用户下单成功后,有那些操作?
// 1.增加支付回调接口日志
// 2.修改订单数据库状态为已经成功
// 3.调用积分服务接口
// 4.调用消息服务平台服务接口

1.需要重构代码

     @Slf4j
        public class PayCallbackService {
         
            public boolean callback(Map<String, String> verifySignature) {
                // 1.第一步打印日志信息
                String orderId = verifySignature.get("orderId"); // 获取后台通知的数据,其他字段也可用类似方式获取
                String respCode = verifySignature.get("respCode");
                log.info("orderId:{},respCode:{}", orderId, respCode);
    
                // 2.修改订单状态为已经支付
                new PaymentTransactionMapper() {
                    @Override
                    public void updatePaymentStatus() {
                        log.info(">>>修改订单状态为已经支付>>>>>");
                    }
                }.updatePaymentStatus();
    
    
                // 3.调用积分接口增加积分
                HttpClientUtils.doPost("jifen.com", "积分接口");
    
                // 4.调用消息服务平台提示
                HttpClientUtils.doPost("msg.com", "调用消息接口");
    
                return true;
            }
        }

在这里插入图片描述

2.创建业务逻辑封装

@Component
@Slf4j
public class LogService {

    public void logService(Map<String, String> verifySignature) {
        // 1.第一步打印日志信息
        String orderId = verifySignature.get("orderId"); // 获取后台通知的数据,其他字段也可用类似方式获取
        String respCode = verifySignature.get("respCode");
        log.info("第一个模块>>>orderId:{},respCode:{}", orderId, respCode);
    }

}

@Slf4j
@Component
public class PaymentService {

    public void updatePaymentStatus() {
        // 2.修改订单状态为已经支付
        new PaymentTransactionMapper() {
            @Override
            public void updatePaymentStatus() {
                log.info("第二个模块>>>修改订单状态为已经支付>>>>>");
            }
        }.updatePaymentStatus();
    }
}
@Component
@Slf4j
public class IntegralService {

    public void callIntegral() {
        // 3.调用积分接口增加积分
        HttpClientUtils.doPost("jifen.com", "积分接口");
        log.info("第三个模块>>>调用积分接口打印日志>>>>>");
    }
}


@Component
@Slf4j
public class MsgService {

    public void msgService() {
                HttpClientUtils.doPost("msg.com", "调用消息接口");
        log.info("第四个模块>>>调用消息模块打印日志>>>>>");
    }
}

创建门面接口

@Component
public class PayCallbackFacade {
    @Autowired
    private LogService logService;
    @Autowired
    private PaymentService paymentService;
    @Autowired
    private IntegralService integralService;
    @Autowired
    private MsgService msgService;

    public boolean callbackFacade(Map<String, String> verifySignature) {
        logService.logService(verifySignature);
        paymentService.updatePaymentStatus();
        integralService.callIntegral();
        msgService.msgService();
        return true;
    }
}

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.优点

松散耦合

使得客户端和子系统之间解耦,让子系统内部的模块功能更容易扩展和维护;

简单易用

客户端根本不需要知道子系统内部的实现,或者根本不需要知道子系统内部的构成,它只需要跟Facade类交互即可。

更好的划分访问层次

有些方法是对系统外的,有些方法是系统内部相互交互的使用的。子系统把那些暴露给外部的功能集中到门面中,这样就可以实现客户端的使用,很好的隐藏了子系统内部的细节。

4. 缺点

业务封装类 增加

内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值