程序设计模式,本质是程序员在长期开发实践中,总结出的解决特定问题的“可复用、标准化模板”。它不是语法规则,而是一种编程思路和设计经验,学会运用设计模式,能让我们的代码更简洁、可维护、可扩展,同时降低团队协作的沟通成本。本节课将结合编程基础场景,拆解10大核心程序设计模式,重点讲解其核心思想、适用场景,避免复杂源码,贴合基础学习需求。
一、单例模式(Singleton Pattern)
核心思想:保证一个类在整个程序运行过程中,只创建一个实例对象,且提供一个全局唯一的访问方式,避免重复创建对象造成的内存浪费。
适用场景:程序中某个类的对象无需多个实例,比如数据库连接池、全局配置管理器、日志打印机等。例如,我们开发一个简单的计算器程序,全局只需要一个计算器对象,就可以用单例模式实现。
基础要点:核心是“私有构造方法+全局静态方法”,禁止外部随意创建实例,只允许通过指定方法获取唯一实例。
二、工厂模式(Factory Pattern)
核心思想:将对象的创建逻辑与使用逻辑分离,由“工厂类”统一负责创建对象,调用者无需关心对象的创建细节,只需根据需求向工厂请求即可。
适用场景:需要创建多种同类对象、对象创建过程较复杂(如需要初始化参数、判断条件)时使用。例如,开发一个图形绘制程序,有圆形、矩形、三角形三种图形,我们可以创建一个“图形工厂”,调用者只需告诉工厂“要绘制圆形”,工厂就会返回圆形对象,无需自己编写圆形的创建代码。
基础分类:简单工厂(适合少量同类对象)、工厂方法(适合扩展新对象),本节课重点掌握简单工厂的设计思路。
三、抽象工厂模式(Abstract Factory Pattern)
核心思想:在工厂模式的基础上,支持创建“一组相关联的对象”,无需指定具体类,而是通过抽象接口统一管理,适配更复杂的场景。
适用场景:程序中存在多组“配套对象”,比如电脑的“CPU+主板+内存”,不同品牌的电脑有不同的配套组合,此时可以用抽象工厂模式,创建不同品牌的“电脑组件工厂”,统一生成配套组件。
与工厂模式区别:工厂模式创建“单个对象”,抽象工厂模式创建“一组关联对象”。
四、建造者模式(Builder Pattern)
核心思想:将复杂对象的创建过程拆分成多个步骤,允许按照不同的顺序或配置,逐步构建出不同的对象,重点关注“对象的构建步骤”。
适用场景:复杂对象的创建需要多个步骤,且步骤可灵活调整。例如,开发一个“用户信息注册”功能,用户信息包含姓名、手机号、邮箱、地址等字段,有的用户只填必填项(姓名、手机号),有的用户填完整信息,此时可以用建造者模式,逐步添加字段,构建出不同的用户对象。
与工厂模式区别:工厂模式注重“快速创建对象”,建造者模式注重“按步骤、灵活构建对象”。
五、原型模式(Prototype Pattern)
核心思想:利用已有的对象(原型),通过“复制”的方式创建新对象,无需重新执行创建逻辑,提高对象创建效率,尤其适合创建复杂对象。
适用场景:需要频繁创建与现有对象结构相似、仅部分属性不同的对象。例如,开发一个“商品列表”功能,多个商品的分类、品牌、单价相同,只有名称、库存不同,此时可以创建一个“商品原型”,通过复制原型,修改少量属性,快速生成多个商品对象。
基础要点:核心是“克隆”,分为浅克隆(仅复制对象本身,不复制关联对象)和深克隆(复制对象及所有关联对象),基础阶段重点掌握浅克隆。
六、适配器模式(Adapter Pattern)
核心思想:解决两个现有接口不兼容的问题,通过创建一个“适配器类”,将一个接口转换成另一个接口,让原本无法配合工作的类能够协同工作。
适用场景:项目中引入第三方工具、复用旧代码时,出现接口不匹配的情况。例如,我们有一个旧的“支付接口”,只能接收微信支付请求,现在需要接入支付宝支付,支付宝的接口格式与旧接口不同,此时可以创建一个“支付适配器”,将支付宝接口转换成旧接口的格式,无需修改旧代码。
形象类比:就像手机充电器的“转接头”,解决不同接口的充电需求。
七、装饰器模式(Decorator Pattern)
核心思想:在不修改原有类代码的前提下,动态地给对象添加新的功能,通过“装饰器类”包裹原有对象,层层添加功能,实现功能的灵活扩展。
适用场景:需要给对象添加额外功能,且功能可灵活组合。例如,开发一个“文本编辑”功能,基础功能是“输入文本”,我们可以通过装饰器,给它添加“加粗”“斜体”“下划线”等功能,用户可以根据需求,组合使用这些装饰器(比如既加粗又斜体)。
与继承区别:继承是静态扩展功能(修改类代码),装饰器是动态扩展功能(不修改类代码)。
八、观察者模式(Observer Pattern)
核心思想:定义“一对多”的依赖关系,当一个对象(被观察者)的状态发生变化时,所有依赖它的对象(观察者)都会自动收到通知,并做出相应的响应。
适用场景:需要实现“状态联动”的场景,比如消息通知、数据同步。例如,开发一个“天气预报”功能,被观察者是“天气数据”,观察者是“手机APP、网页端、小程序”,当天气数据更新时,所有观察者都会自动显示最新的天气信息。
核心角色:被观察者(存储观察者、通知观察者)、观察者(接收通知、执行响应逻辑)。
九、策略模式(Strategy Pattern)
核心思想:定义一组算法,将每个算法封装成独立的类,让算法之间可以相互替换,且调用者无需关心算法的具体实现,只需根据场景选择合适的算法。
适用场景:同一个问题有多种解决方法,且方法需要灵活切换。例如,开发一个“排序”功能,有冒泡排序、选择排序、插入排序三种算法,我们可以将每种算法封装成一个“策略类”,调用者可以根据数据量的大小,选择不同的排序策略(数据量小时用插入排序,数据量大时用冒泡排序)。
优势:避免大量的if-else判断(无需判断用哪种算法),算法可独立扩展、复用。
十、模板方法模式(Template Method Pattern)
核心思想:定义一个“算法模板”(抽象类),将算法的核心步骤固定下来,其中部分步骤延迟到子类中实现,子类可以修改具体步骤,但不能改变算法的整体流程。

适用场景:多个类的算法流程一致,仅部分步骤不同。例如,开发一个“考试答题”功能,所有考生的答题流程都是“登录→查看题目→答题→提交试卷”,其中“答题”步骤因人而异(不同考生答案不同),此时可以定义一个“答题模板”,将登录、查看题目、提交试卷步骤固定,答题步骤让子类(每个考生)自行实现。
核心要点:模板类(固定流程)、子类(实现可变步骤),体现“封装不变,扩展可变”的思想。
总结
10大程序设计模式各有侧重,核心都是“复用代码、简化开发、提升可维护性”:
创建型模式(单例、工厂、抽象工厂、建造者、原型):解决“对象如何创建”的问题;
结构型模式(适配器、装饰器):解决“类或对象如何组合”的问题;
行为型模式(观察者、策略、模板方法):解决“对象之间如何交互、算法如何设计”的问题。
基础阶段无需死记硬背源码,重点理解每种模式的核心思想和适用场景,在后续编程练习中,尝试判断“哪种场景用哪种模式”,逐步培养编程思维。