深入浅出:设计模式——从熟悉的场景出发,让代码更优雅
2023-12-19 19:21:51
设计模式:简化软件开发的烹饪秘诀
场景一:餐厅点餐系统
想象一下,你走进一家餐厅,服务员递给你菜单。你仔细浏览,选择了几道心仪的菜肴,并告诉服务员你的选择。服务员随后将你的订单传达给厨房,厨师们开始准备你的美食。不久,热气腾腾的菜肴被端上餐桌,你开始享受你的饕餮盛宴。
这个场景可以抽象为一个称为观察者模式 的设计模式。在观察者模式中,一个观察者 (服务员)监视一个被观察者 (厨师)的状态变化。当被观察者发生变化时,观察者会做出相应的反应(向厨师传达订单)。
代码示例:
// 观察者接口
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开发
- 游戏开发
掌握设计模式可以帮助我们更轻松地应对编程挑战,编写出更优雅、更易维护、更可重用的代码。
常见问题解答
- 什么是设计模式?
设计模式是经过时间和实践检验的通用编程解决方案,可以帮助我们以更简单、更有效的方式解决常见问题。
- 设计模式有哪些类型?
设计模式分为三大类:创建型模式、结构型模式和行为型模式。
- 如何应用设计模式?
在编写代码时,根据你的特定需求选择合适的模式。通过在不同场景中使用模式,你可以显著改善代码的可读性、可维护性和可重用性。
- 学习设计模式有哪些好处?
掌握设计模式可以使你成为一名更优秀的软件开发人员,编写出更优雅、更易维护、更可重用的代码。
- 有哪些资源可以帮助我学习设计模式?
有许多书籍、在线课程和文档可以帮助你学习设计模式。一些经典的书籍包括《设计模式:可复用面向对象软件的基础》和《Head First设计模式》。