设计模式——外观模式

本文由云都小生撰写,介绍了设计模式中的外观模式。外观模式旨在为子系统提供一个统一的入口,降低客户端与子系统的耦合度。通过一个服务员类的比喻,阐述了外观模式的概念。文中提供了代码案例,并探讨了如何通过增加外观抽象类来优化实现,以支持不同类型的咖啡需求。

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


Author:云都小生


概述



外观模式也是一种结构设计模式,应用非常频繁,它是用来简化客户端与系统之间的交互。很多时候我们都希望用户得到更加简单直白纯粹的体验。

如果我们给用户提供了速溶咖啡、热水,糖,杯子等,那用户就可以自己开始泡咖啡了。那我们为何不提供一个服务员,用户只需要跟服务员说要咖啡,就冲一杯咖啡给他呢?

这里的服务员就是外观模式中关键的外观类了。

在外观模式中通常两种角色,一种是外观类,另一种是子系统。

外观模式:为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

好了,我们来冲咖啡吧。


代码案例


//子系统类1:准备热水
public class Hotwater {
    public void inverted()
    {
        System.out.println("已经准备好热水了");
    }
}

//子系统类2:将咖啡粉倒入热水
public class InstantCoffee {
    public void openCoffee()
    {
        System.out.println("将咖啡粉倒进了热水");
    }
}

//子系统类3:加糖
public class AddSugar {
    public void addSugar()
    {
        System.out.println("已经加好适量的糖");
    }
}

//外观类:相当于服务员
public class CoffeeFacade {
    private Hotwater hotwater;
    private AddSugar addsugar;
    private InstantCoffee instantCoffee;

    CoffeeFacade()
    {
        hotwater = new Hotwater();
        addsugar = new AddSugar();
        instantCoffee = new InstantCoffee();
    }

    public void rushCoffee()
    {
        hotwater.inverted();
        instantCoffee.openCoffee();
        addsugar.addSugar();
        System.out.println("咖啡已经完成,请享用!");
    }
}

//Client
public class Client {
    public static void main(String[] args) {
        CoffeeFacade coffee = new CoffeeFacade();
        coffee.rushCoffee();
    }
}

关键就在于外观类,它实现了降低子系统与客户类的耦合度。


优化



看完上面的代码,你一定发现了一件重要的事,对!小生一看就是那种几乎不喝咖啡的人。

但是还有另外一件事,如果我想要有多种的咖啡,这个要怎么去优化嘞?

我们可以增加一个抽象类——外观抽象类,然后不同的外观类从这个类继承,那样我们就可以增加许多不同的咖啡了!

看图。

这里写图片描述

2017/12/4 15:31:15 @Author:云都小生

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值