设计模式学习笔记

举报
一颗小谷粒 发表于 2025/03/31 17:14:22 2025/03/31
【摘要】 在软件开发领域,设计模式就如同建筑蓝图,指导着开发者构建结构清晰、可维护、可扩展的软件系统。无论是开发小型应用,还是大型企业级项目,掌握设计模式都能显著提升软件质量,优化开发流程。本文将带你走进设计模式的世界,深入了解其概念、分类,以及在实际开发中的应用。一、设计模式是什么设计模式由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlisside...

在软件开发领域,设计模式就如同建筑蓝图,指导着开发者构建结构清晰、可维护、可扩展的软件系统。无论是开发小型应用,还是大型企业级项目,掌握设计模式都能显著提升软件质量,优化开发流程。本文将带你走进设计模式的世界,深入了解其概念、分类,以及在实际开发中的应用。

一、设计模式是什么

设计模式由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著的《设计模式 - 可复用的面向对象软件元素》(通常被称为 “四人组书籍”,即 “Gang of Four,GoF”)首次提出。简单来说,设计模式是针对反复出现的问题,总结归纳出的通用解决方案。它并非特定的代码实现,而是一种思想、一种策略,能帮助开发者在面对复杂的软件设计问题时,迅速找到有效的解决途径。
举个例子,在游戏开发中,游戏角色的创建过程往往较为复杂,涉及多个参数的设置。使用工厂模式,就能将角色创建的过程封装起来,开发者只需关注创建什么角色,而无需关心具体的创建细节,这不仅提高了代码的可读性,也增强了代码的维护性。

二、设计模式的分类

根据目的和用途,设计模式可分为创建型、结构型和行为型三大类。

1. 创建型模式

创建型模式主要用于对象的创建过程,帮助开发者更加灵活、高效地创建对象。常见的创建型模式有单例模式、工厂模式、抽象工厂模式、建造者模式和原型模式。
以单例模式为例,它确保一个类在系统中只有一个实例,并提供全局访问点。在日志记录器、数据库连接池等场景中,单例模式应用广泛。通过单例模式,既能避免资源的重复创建,又能保证数据的一致性。下面是单例模式的经典实现方式:
public class Singleton {
    private static Singleton instance;

    private Singleton() {}

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

2. 结构型模式

结构型模式关注如何将类或对象组合成更大的结构,以实现特定的功能。常见的结构型模式有代理模式、适配器模式、桥接模式、装饰器模式、外观模式、享元模式和组合模式。
比如代理模式,它为其他对象提供一种代理以控制对这个对象的访问。在远程调用、权限控制等场景中,代理模式能有效隐藏目标对象的具体实现细节,增强系统的安全性和扩展性。下面是代理模式的简单示例:
interface Image {
    void display();
}

class RealImage implements Image {
    private String fileName;

    public RealImage(String fileName) {
        this.fileName = fileName;
        loadFromDisk(fileName);
    }

    private void loadFromDisk(String fileName) {
        System.out.println("Loading " + fileName);
    }

    @Override
    public void display() {
        System.out.println("Displaying " + fileName);
    }
}

class ProxyImage implements Image {
    private String fileName;
    private RealImage realImage;

    public ProxyImage(String fileName) {
        this.fileName = fileName;
    }

    @Override
    public void display() {
        if (realImage == null) {
            realImage = new RealImage(fileName);
        }
        realImage.display();
    }
}

3. 行为型模式

行为型模式主要用于处理对象之间的交互和职责分配,以实现复杂的行为逻辑。常见的行为型模式有策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式和解释器模式。
以观察者模式为例,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在消息推送、事件驱动等场景中,观察者模式应用十分广泛。下面是观察者模式的简单实现:
import java.util.ArrayList;
import java.util.List;

interface Observer {
    void update(String message);
}

class NewsSubscriber implements Observer {
    private String name;

    public NewsSubscriber(String name) {
        this.name = name;
    }

    @Override
    public void update(String message) {
        System.out.println(name + " received news: " + message);
    }
}

class NewsPublisher {
    private List<Observer> subscribers = new ArrayList<>();
    private String latestNews;

    public void attach(Observer observer) {
        subscribers.add(observer);
    }

    public void detach(Observer observer) {
        subscribers.remove(observer);
    }

    public void notifySubscribers() {
        for (Observer subscriber : subscribers) {
            subscriber.update(latestNews);
        }
    }

    public void publishNews(String news) {
        this.latestNews = news;
        notifySubscribers();
    }
}

三、设计模式的优势与应用场景

1. 提高代码的可维护性

通过使用设计模式,将复杂的业务逻辑分解为多个独立的模块,每个模块负责特定的功能,使得代码结构更加清晰,易于理解和维护。当业务需求发生变化时,只需修改相应的模块,而不会影响到整个系统。

2. 增强代码的可扩展性

设计模式遵循开放 - 封闭原则,即对扩展开放,对修改封闭。在系统中引入新的功能时,只需按照设计模式的规范进行扩展,而无需修改现有的代码,降低了代码修改带来的风险。

3. 实现代码的复用性

许多设计模式都具有高度的复用性,如工厂模式、单例模式等。在不同的项目中,开发者可以直接复用这些设计模式,减少重复开发,提高开发效率。
设计模式在各种软件开发场景中都有广泛的应用。在 Web 开发中,MVC(Model - View - Controller)模式就是一种基于设计模式的架构,它将业务逻辑、数据展示和用户交互分离,提高了 Web 应用的可维护性和可扩展性。在移动应用开发中,同样可以使用设计模式来优化应用的架构,提升用户体验。

四、总结

设计模式是软件开发领域的宝贵财富,它为开发者提供了一种通用的解决方案,帮助我们应对各种复杂的软件设计问题。通过学习和应用设计模式,不仅能提升代码质量,还能培养良好的编程习惯和设计思维。
在实际开发中,要根据具体的业务需求和场景,选择合适的设计模式。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。