0

0

设计模式(design pattern)在Java中比较常见,在其他编程语言中也同等重要吗?

php中文网

php中文网

发布时间:2016-06-06 16:24:17

|

1892人浏览过

|

来源于php中文网

原创

设计模式(
design pattern)在Java中用的比较多吗?为什么FP(Functional Programming)不太用呢?c++,python中设计模式也很重要吗?

InsCode
InsCode

InsCode 是CSDN旗下的一个无需安装的编程、协作和分享社区

下载

回复内容:

在一个新的语言环境下研究设计模式的方法有两种。

第一种是,把《设计模式》一书的头两章看作全书精髓,把23个模式实例看成举例说明。在新环境中试图使用头两章的思路去发现和整理合适的设计模式。

第二种是,把《设计模式》头两章看成泛泛而谈的序言,把23个模式实例看成全书精髓。在新的语言环境中试图重新实现这23个模式并寻找它们在新环境下的用法。

第一种人写出了《企业应用架构模式》,《xUnit测试模式》,《企业集成模式》, 《重构》这样的书 (手机党,书名暂凭记忆写下, 有机会再校对)

第二种人写出了《动态语言比静态语言先进》,《从设计模式谈为何ruby完爆Java》,《让我告诉你如何用九行代码在python中实现设计模式》,《Java必须死》之类的网文。(好吧,名称纯属杜撰,不过你懂的) 在C#里也用得不算少,C++会用一部分,但不会像Java那样几乎到处都在用。

设计模式的发明,更多是为了解决语言缺陷用的手段。在FP里基本上没有对象的概念,很多设计模式自然也用不上。对于动态类型的语言,很多设计模式基本上是用不上的,而且python把一部分设计模式的理念融入了语法,就更不需要太对使用设计模式了

这是我在另一个问题里的回答,基本上表达了我对设计模式的态度:Python 里没有接口,如何写设计模式? - 刘启明的回答 设计模式就像张无忌学太极拳。
首先要好好学,但是学完后应该把它们全部忘了,只把其精神融入脑中。然后在实践的时候,千万不要去生搬硬套某模式,而是自己去设计。等项目做多了,代码写多了以后,会发现虽然你没有刻意用设计模式,但是你写出来的代码正好暗合某设计模式里的思想。 语言可以分 2 种
1. 相信程序员.
2. 不相信程序员

Java 是不相信程序员的, 所以设计模式盛行. 一切都要按照条条框框来.

Python 是相信程序员的, 连类的 public / private 成员, 都只是一种约定.
程序员强行从外部调用 private 方法, python 也会同意的.

Java 中典型的 setter / getter, 在优秀的 python 的代码中也根本看不到.
python 老爹也反对大家把代码写的这么复杂.

垠神曾经专门 "解密"过设计模式, 链接: 王垠:解密“设计模式”
核心的思想是,
没有设计模式的时候, 我也是这么写代码的.
所谓的模式, 就是经验的总结.
照搬模式东拼西凑,而不能看透事物的本质,其实是设计不出好东西的。
如果理解了模式, 也就没必要按照模式去写代码了.

我的理解, 设计模式, 学习是必须的. 至于实战的时候. 没必要关心用了啥设计模式.

关于 FP.
如果说, 设计模式, 更多的是一种经验总结.
那么, FP 则是一种逻辑思路, 需要语言有一些特性的支持才可以.
只有新版本的 Java 才支持 FP. 以前, 不是 Java 用 FP 少, 而是根本没法用.
  1. GoF的Design Pattern不是以Java为例子写的,里面的例子都是C++和small talk
  2. 在前言里面已经说了,Design Pattern是Language Specific的,只能解决特定语言的特定问题。
  3. FP有自己的一套东西,他们不管那个叫Design Pattern,不过和Design Pattern的作用是一样的。
  4. 虽然某个Pattern可能换个语言就没啥卵用了,但是这个Pattern所体现的基本原则通常是通用的,你不需要自己去实现只是因为写语法/标准库的人帮你干了。
FP有自己的设计模式,比如Monad

至于java里的设计模型所处理的问题,由于FP里函数是一等公民,所以很多问题不存在了,自然也就用不上那些模式了。
设计模式就是实现了这些面向对象原则,从而达到了代码复用、增加可维护性的目的。
设计模式只是一种工具,一种手段...最终是要写出解耦,复用,可维护的代码的...
工具不重要,目的才重要... 1. 设计模式是给定场景下的可重用的通用解决方案。它由一列的最佳实践来实现。
2. 任何语言都有自己的编程范式,用这种范式在一定场景下解决同样的问题肯定有可重用的方案。
3. java中的设计模式是OO编程范式的设计模式。
4. 即使同样是OO语言,ruby和java的最佳实践的设计模式就有显著区别。因为ruby语法灵活性且支持多范式。
5. FP范式在给定场景下一样有可重用的通用解决方案可以定义出来。例如Pipeline,Observer,Strategy等
6. 有广泛的观点说FP是没有设计模式的。OO里设计模式的存在都是为了弥补语言特性的缺陷。

我个人的观点就是:
如果用现在的OO类语言写代码,那么设计模式很重要。
如果写FP,那么你的实现本身就是为了实现设计模式。 关于这个问题其实已经有很多讨论了,见 Are Design Patterns Missing Language Features

推荐一个视频
pyvideo.org - Python Design Patterns 1
演讲者是我非常欣赏的 Brandon Rhodes,他在这个视频里列举了 GOF 中的各种设计模式在 Python 中的应用,哪些因为 Python 的语言特性直接消失了,哪些仍然有用。 In software engineering, a design pattern is a general reusable solution to a commonly occurring problem within a given context in software design

你感觉其他语言应不应该有?

相关专题

更多
云朵浏览器入口合集
云朵浏览器入口合集

本专题整合了云朵浏览器入口合集,阅读专题下面的文章了解更多详细地址。

0

2026.01.20

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

20

2026.01.20

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

62

2026.01.19

java用途介绍
java用途介绍

本专题整合了java用途功能相关介绍,阅读专题下面的文章了解更多详细内容。

87

2026.01.19

java输出数组相关教程
java输出数组相关教程

本专题整合了java输出数组相关教程,阅读专题下面的文章了解更多详细内容。

39

2026.01.19

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

10

2026.01.19

xml格式相关教程
xml格式相关教程

本专题整合了xml格式相关教程汇总,阅读专题下面的文章了解更多详细内容。

13

2026.01.19

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

19

2026.01.19

微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

160

2026.01.18

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
布尔教育设计模式视频教程
布尔教育设计模式视频教程

共10课时 | 2.6万人学习

设计模式
设计模式

共36课时 | 25万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号