【java】----Java中常见的设计模式讲解
Java 常见设计模式解析
设计模式是解决软件开发中重复问题的成熟方案,按用途可分为创建型、结构型、行为型三大类。以下介绍核心设计模式的原理、作用及故事类比。
一、创建型模式:管理对象创建
-
单例模式
• 原理:确保类仅有一个实例,并提供全局访问点。
• 作用:节省资源,避免多个实例导致的状态混乱(如配置管理器、线程池)。
• 故事类比:皇宫里的“皇帝”。整个国家只有一个皇帝,大臣们无论有什么事,都只能找这一个皇帝汇报,不会出现多个皇帝发号施令的混乱情况。
-
工厂模式(简单工厂+工厂方法+抽象工厂)
• 原理:
◦ 简单工厂:通过一个工厂类根据参数创建不同产品实例。
◦ 工厂方法:为每个产品定义专属工厂,工厂接口统一创建行为。
◦ 抽象工厂:创建“产品族”(多个相关产品),工厂接口对应多个产品创建方法。
• 作用:解耦对象创建与使用,简化扩展(新增产品只需加工厂,无需修改原有代码)。
• 故事类比:
◦ 简单工厂:一家“万能蛋糕店”,顾客说要“巧克力蛋糕”或“水果蛋糕”,店员直接做出来。
◦ 工厂方法:蛋糕店连锁品牌,开了“巧克力蛋糕工厂”“水果蛋糕工厂”,各工厂只做自己专长的蛋糕。
◦ 抽象工厂:“西式甜品集团”,旗下工厂既能做蛋糕,又能做配套的饼干、饮品,一套满足西式甜品需求。
-
建造者模式
• 原理:将复杂对象的构建过程与组成部分分离,由建造者逐步构建,导演类控制构建流程。
• 作用:灵活构建复杂对象(如参数多、组合方式多的对象,如订单、文档),保证构建过程清晰稳定。
• 故事类比:组装电脑。“用户”(客户端)要一台定制电脑,“导演”(工程师)负责安排流程,“建造者”(硬件组装师)按步骤装CPU、内存、显卡,最终组装出符合要求的电脑,用户不用管具体组装细节。
二、结构型模式:优化类/对象的组合关系
-
适配器模式
• 原理:定义适配器类,转换一个类的接口为客户端期望的接口,使不兼容的类能一起工作。
• 作用:解决接口不匹配问题,复用现有类(如旧系统接口适配新系统)。
• 故事类比:电源适配器。中国的电器插头(旧接口)不能直接插在欧洲的插座(新接口)上,用一个电源适配器转换后,就能正常使用了。
-
装饰器模式
• 原理:通过装饰类包裹原对象,在不修改原类的基础上,动态添加新功能。
• 作用:灵活扩展功能,避免用继承导致的类爆炸(如IO流中的BufferedReader装饰Reader)。
• 故事类比:给手机加配件。手机(原对象)本身能打电话,加个手机壳(装饰器1)增加防护功能,再贴个钢化膜(装饰器2)增加屏幕保护功能,手机本身没改,却多了新能力。
-
代理模式
• 原理:为目标对象创建代理对象,客户端通过代理访问目标对象,代理可在访问前后添加额外操作。
• 作用:控制访问(如权限校验)、增强功能(如日志记录、缓存)(如Spring AOP的动态代理)。
• 故事类比:明星的经纪人。粉丝(客户端)想找明星(目标对象)商演,不能直接联系,得通过经纪人(代理)。经纪人会先审核活动合规性,再安排明星参与,还会处理后续款项结算,明星只需专注表演。
三、行为型模式:规范对象间的交互行为
-
观察者模式
• 原理:定义对象间的一对多依赖,当主题对象状态变化时,所有依赖它的观察者自动收到通知并更新。
• 作用:解耦主题与观察者,支持动态添加/删除观察者(如GUI事件监听、消息订阅系统)。
• 故事类比:天气预报。气象局(主题)发布天气信息,手机天气APP、电视新闻、户外电子屏(观察者)都订阅了气象局的信息,一旦天气变化,所有订阅者都会同步更新显示内容。
-
策略模式
• 原理:定义多个算法(策略),封装成独立类,使算法可动态切换,客户端根据需求选择策略。
• 作用:避免用大量if-else判断算法,便于扩展新算法(如支付系统的多种支付方式)。
• 故事类比:出行方式选择。小明(客户端)要去公司,可选择公交(策略1)、地铁(策略2)、打车(策略3)。下雨天选打车,高峰期选地铁,根据不同场景动态切换,不用改小明的出行需求本身。
-
模板方法模式
• 原理:在抽象类中定义算法骨架(模板方法),将可变步骤延迟到子类实现,固定不变的步骤在抽象类中实现。
• 作用:统一算法流程,复用不变代码,灵活定制可变部分(如报表生成的固定格式+可变数据)。
• 故事类比:做蛋糕的流程。蛋糕店(抽象类)规定做蛋糕的固定步骤:和面→烘焙→装饰。和面、烘焙步骤固定(抽象类实现),装饰步骤交给不同的师傅(子类),有的做水果装饰,有的做奶油花装饰,既保证蛋糕基础品质,又有多样风格。
更多推荐

所有评论(0)