Java 常见设计模式有哪些

很多刚接触Java编程的新手,刚学会写几个循环、类和对象,就会好奇:“怎么写出的代码,别人用着省心,自己改的时候不头疼?”其实秘诀之一,就是用好前辈总结的“代码最优解”——设计模式。它不是什么高深的魔法,而是前人踩过坑后,整理出的一套“通用解决方案”,今天就用生活化的例子,给大家讲几个Java里最常用的设计模式。

单例模式:一个就够,别搞重复“替身”

生活里,很多东西不需要多个副本,比如家里的自来水厂总阀门、公司的公章,只要一个能正常用就行,多了反而乱套。单例模式就是干这个的:保证一个类,在整个程序运行过程中,只有一个实例存在,还能全局调用。

Java 常见设计模式有哪些

比如用Java写一个“系统配置工具”,程序启动时要加载一次数据库地址、密码、文件存储路径,之后所有模块都要用到这些配置。如果随便写,可能不小心new出好几个配置对象,要么浪费内存,要么改了一个配置,另一个没同步,出bug都找不到原因。用单例模式的话,就像把公章锁在一个固定抽屉里,所有人用的时候都来这儿拿,不会变出好几个公章瞎盖。

工厂模式:不用自己造,找“工厂”要成品

自己做蛋糕要揉面、打发、烘烤,太麻烦,不如去蛋糕店买——这就是工厂模式的核心:把“创建对象”的过程,交给专门的“工厂类”,程序员不用自己写代码造对象,直接找工厂要就行。

比如做一个外卖点餐系统,需要生成“牛肉饭”“蔬菜沙拉”“奶茶”这些餐品。如果每个餐品都自己new,后来加新品、改参数,要改好多地方,容易出错。用工厂模式的话,写一个“餐品工厂”,告诉工厂“我要牛肉饭”,工厂直接给你做好的牛肉饭对象。以后加新品,只要给工厂加个对应方法就行,不用改点餐的核心逻辑,就像蛋糕店加了新口味,你不用管店里怎么烤,只要说要什么就行。

代理模式:帮你跑腿,不碰核心事

你想给远在老家的奶奶寄生日礼物,自己买、打包、找快递,太费时间,不如找个亲戚帮忙:你把礼物和地址给亲戚,亲戚帮你买合适的包装、找靠谱快递寄,不用你亲自跑。代理模式就像这个亲戚,帮你做一些辅助工作,不用你碰核心流程。

在Java里,代理模式常用在日志打印、权限控制这些场景。比如你写了一个“订单支付”的核心代码,直接用的话,每次支付都要手动加一句“支付成功,订单号XXX”的日志,还要检查用户有没有支付权限,代码又乱又重复。用代理模式,写一个代理类,让代理类先检查权限,再调用核心的支付代码,最后自动打印日志。就像亲戚先确认你给的地址对不对,再帮你寄,全程不用你动手处理杂事。

观察者模式:通知到所有人,不用挨个喊

班级里要是老师通知春游,只会说一句,班长会把消息告诉所有同学,不用老师挨个喊,这就是观察者模式的逻辑:一个“主题”(比如春游通知),一堆“观察者”(同学们),主题更新了,自动通知所有观察者。

Java里最常见的应用,就是消息推送系统。比如你做一个新闻APP,用户可以订阅“科技”“体育”“娱乐”类新闻。如果不用观察者模式,每次有新科技新闻,都要挨个找所有订阅了科技的用户发通知,既慢又容易漏。用观察者模式的话,把每个用户当成观察者,新闻主题更新时,自动给所有订阅了的用户发推送,就像班长收到通知后,直接发群消息,所有在群里的同学都能看到。

这些设计模式不是死板的规则,而是解决问题的思路。刚上手不用硬背所有,先把这几个常用的用熟,写代码时就能少踩很多坑,也能让自己的代码更清晰、更好维护。

上一篇 JavaScript for 循环怎么用