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

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2016-06-06 16:24:17
Original
1664 Leute haben es durchsucht

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

回复内容:

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

第一种是,把《设计模式》一书的头两章看作全书精髓,把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

你感觉其他语言应不应该有?
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage