返回

深入浅出:设计模式——从熟悉的场景出发,让代码更优雅

前端

设计模式:简化软件开发的烹饪秘诀

场景一:餐厅点餐系统

想象一下,你走进一家餐厅,服务员递给你菜单。你仔细浏览,选择了几道心仪的菜肴,并告诉服务员你的选择。服务员随后将你的订单传达给厨房,厨师们开始准备你的美食。不久,热气腾腾的菜肴被端上餐桌,你开始享受你的饕餮盛宴。

这个场景可以抽象为一个称为观察者模式 的设计模式。在观察者模式中,一个观察者 (服务员)监视一个被观察者 (厨师)的状态变化。当被观察者发生变化时,观察者会做出相应的反应(向厨师传达订单)。

代码示例:

// 观察者接口
interface Observer {
    void update();
}

// 被观察者类
class Observable {
    private List<Observer> observers = new ArrayList<>();

    public void addObserver(Observer observer) {
        observers.add(observer);
    }

    public void removeObserver(Observer observer) {
        observers.remove(observer);
    }

    protected void notifyObservers() {
        for (Observer observer : observers) {
            observer.update();
        }
    }
}

// 具体观察者类
class Waiter implements Observer {

    @Override
    public void update() {
        // 服务员收到厨师状态变化的通知,将订单传达给厨师
        System.out.println("服务员:厨师已经开始准备订单。");
    }
}

// 具体被观察者类
class Chef extends Observable {

    // 厨师的状态发生了变化(开始准备订单)
    public void startCooking() {
        // 通知所有观察者(服务员)
        notifyObservers();
    }
}

场景二:网购商城

你打开一个网购商城,在搜索框中输入你想购买的商品,然后点击搜索按钮。商城根据你的搜索条件返回一系列商品信息。你选择一件商品,点击购买按钮,填写你的个人信息和支付方式。最后,你点击确认购买按钮,完成购物流程。

这个场景可以抽象为一个称为工厂模式 的设计模式。在工厂模式中,一个工厂 (网购商城)根据你的需求(搜索条件)生产产品 (商品信息)。

代码示例:

// 产品接口
interface Product {
    String getName();
    double getPrice();
}

// 具体产品类
class Book implements Product {

    @Override
    public String getName() {
        return "Java设计模式";
    }

    @Override
    public double getPrice() {
        return 25.99;
    }
}

// 工厂类
class ProductFactory {

    public Product getProduct(String name) {
        if (name.equals("Java设计模式")) {
            return new Book();
        } else {
            // 可以根据需要添加其他产品类型
            return null;
        }
    }
}

场景三:银行转账系统

你打开银行应用,输入转账金额和收款人的银行卡号,然后点击转账按钮。银行系统验证你的身份信息,并从你的账户中扣除转账金额。同时,银行系统将转账金额转入收款人的账户。

这个场景可以抽象为一个称为单例模式 的设计模式。在单例模式中,系统只允许创建一个实例 (银行转账系统),并且可以通过这个实例访问系统的所有功能(转账、查询余额等)。

代码示例:

// 单例类
public class BankTransferSystem {

    private static BankTransferSystem instance = null;

    private BankTransferSystem() {
        // 私有构造函数,防止外部创建其他实例
    }

    public static BankTransferSystem getInstance() {
        if (instance == null) {
            synchronized (BankTransferSystem.class) {
                if (instance == null) {
                    instance = new BankTransferSystem();
                }
            }
        }
        return instance;
    }

    public void transfer(double amount, String recipientAccount) {
        // 转账逻辑
    }
}

设计模式分类

设计模式通常分为三大类:

  • 创建型模式: 用于创建对象。
  • 结构型模式: 用于组织对象。
  • 行为型模式: 用于对象之间的通信。

设计模式应用

设计模式广泛应用于各种软件开发领域,包括:

  • 操作系统
  • 数据库
  • Web开发
  • 游戏开发

掌握设计模式可以帮助我们更轻松地应对编程挑战,编写出更优雅、更易维护、更可重用的代码。

常见问题解答

  1. 什么是设计模式?

设计模式是经过时间和实践检验的通用编程解决方案,可以帮助我们以更简单、更有效的方式解决常见问题。

  1. 设计模式有哪些类型?

设计模式分为三大类:创建型模式、结构型模式和行为型模式。

  1. 如何应用设计模式?

在编写代码时,根据你的特定需求选择合适的模式。通过在不同场景中使用模式,你可以显著改善代码的可读性、可维护性和可重用性。

  1. 学习设计模式有哪些好处?

掌握设计模式可以使你成为一名更优秀的软件开发人员,编写出更优雅、更易维护、更可重用的代码。

  1. 有哪些资源可以帮助我学习设计模式?

有许多书籍、在线课程和文档可以帮助你学习设计模式。一些经典的书籍包括《设计模式:可复用面向对象软件的基础》和《Head First设计模式》。