【设计模式|结构型】外观模式(Facade Pattern)

介绍

外观模式就像是一家快餐店的服务员。当你去快餐店点餐时,服务员会告诉你今天的特色菜、套餐、饮料等等,然后你只需要告诉服务员你想要什么,服务员就会帮你把所有食物和饮料都准备好,最后一起送到你的桌子上。

在这个例子中,服务员就是外观模式,他隐藏了所有的复杂操作和细节,只提供了一个简单的接口,让顾客可以轻松地点餐。同样地,外观模式也隐藏了系统的复杂性,提供了一个简单的接口,让客户端可以方便地使用系统中的功能。

概述

外观模式是一种结构型设计模式,它提供了一个统一的接口,用于访问子系统中的一组接口。通过在外观类中定义一个高层接口,外观模式隐藏了子系统的复杂性,并将客户端与子系统的内部逻辑解耦。

示例一

以快餐店服务员为例。

首先,创建一些子系统类,模拟快餐店的各种食物和饮料:

// 子系统类 - 汉堡
class Hamburger {
    public void prepareHamburger() {
        System.out.println("准备汉堡");
    }
}

// 子系统类 - 可乐
class Cola {
    public void prepareCola() {
        System.out.println("准备可乐");
    }
}

// 子系统类 - 薯条
class FrenchFries {
    public void prepareFrenchFries() {
        System.out.println("准备薯条");
    }
}

然后,创建外观类 Waiter,作为服务员的角色,提供简单的接口给顾客点餐:

// 外观类 - 服务员
class Waiter {
    private Hamburger hamburger;
    private Cola cola;
    private FrenchFries frenchFries;

    public Waiter() {
        hamburger = new Hamburger();
        cola = new Cola();
        frenchFries = new FrenchFries();
    }

    public void takeOrder() {
        hamburger.prepareHamburger();
        cola.prepareCola();
        frenchFries.prepareFrenchFries();
        System.out.println("所有食物和饮料已准备好");
    }
}

测试:

public class Client {
    public static void main(String[] args) {
        Waiter waiter = new Waiter();
        waiter.takeOrder();
    }
}

运行结果:

准备汉堡
准备可乐
准备薯条
所有食物和饮料已准备好

示例二

一个常见的实际应用场景是购物平台。假设你正在开发一个电子商务平台,需要提供一个统一的购物接口,包括添加商品到购物车、生成订单、支付等操作。你可以使用外观模式来封装底层的购物逻辑,以提供一个简单的购物接口给客户端使用。

以下是一个示例代码:

class ShoppingCart {
    public void addProduct(String productId) {
        System.out.println("添加商品到购物车:" + productId);
    }

    public void generateOrder() {
        System.out.println("生成订单");
    }

    public void payOrder(String orderId) {
        System.out.println("支付订单:" + orderId);
    }
}

class ShoppingFacade {
    private ShoppingCart shoppingCart;

    public ShoppingFacade() {
        this.shoppingCart = new ShoppingCart();
    }

    public void addToCart(String productId) {
        shoppingCart.addProduct(productId);
    }

    public void checkout() {
        shoppingCart.generateOrder();
    }

    public void pay(String orderId) {
        shoppingCart.payOrder(orderId);
    }
}

public class Main {
    public static void main(String[] args) {
        ShoppingFacade shoppingFacade = new ShoppingFacade();
        shoppingFacade.addToCart("P001");
        shoppingFacade.addToCart("P002");
        shoppingFacade.checkout();
        shoppingFacade.pay("O001");
    }
}

输出结果:

添加商品到购物车:P001
添加商品到购物车:P002
生成订单
支付订单:O001

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值