我们发现设计模式在Java社区很流行,但是在C++社区却没有那么被关注,甚至有点被排斥,究竟是什么原因造成这个差异的呢?

   昨天和同事讨论这个问题,最后得出几点原因:

    (1)C++内存需要自己管理,所以有些模式在C++里使用不是那么方便,但是Java不用关心内存,所以在Java里的使用设计模式有天生的优势。随着shared_ptr, weak_ptr, unique_ptr等加入C++11,相信这方面会有所改进。

   (2)在Java的类库体系中,很多设计本身就是基于设计模式的,所以在调用Java类库时,你会不知不觉地使用设计模式,这样导致你在设计自己的接口时也会使用设计模式。

   (3)C++一般被用来解决一些比较底层的问题,所以用C++时,我们更多的关心是如何实现某个feature; 但是Java借助其丰富的类库,实现feature往往不是问题,所以他们有更多精力关注设计。

   (4)设计模式一般要间接层,会造成性能的损失,而C++应用的场合往往比较强调性能。对于这个问题,如果你的程序更注重性能(比如内核),确实不应该引入太多间接层;但是如果你的程序更注重可扩充性和可维护性,你就该考虑设计模式了。

   (5)C++社区的很多程序员是从c甚至汇编转过来的,所以这些人更习惯面向过程的设计方式,即使用C++也只是拿来封装一些简单的类,用不到设计模式。

(6)C++支持多种编程模型,包括面向过程,面向对象,基于对象,泛型编程等,设计模式主要是基于面向对象的,而Java只支持面向对象开发。

最后贴张某校的招生海报,你看看究竟是C, 还是C++?你是怎么看设计模式在C++社区的使用情况呢?

http://www.cppblog.com/weiym/archive/2012/06/14/178758.html

设计模式在比较大型的C++开源项目中用的还是比较多的,比如网络库ACE,界面库QT,游戏引擎Orge, Irrlicht等

为什么设计模式在C++社区没有Java社区流行?的更多相关文章

  1. Java 社区平台 - Sym 1.7.0 发布

    English | 中文 简介 Symphony([ˈsɪmfəni],n.交响乐)是一个现代化的社区平台,因为它: 实现了面向内容讨论的论坛 包含了面向用户分享.交友.游戏的社交网络 集成了聚合独立 ...

  2. 国内有哪些质量高的JAVA社区?

    国内有哪些质量高的JAVA社区? 转自:http://www.zhihu.com/question/29836842#answer-13737722 并发编程网 - ifeve.com 强烈推荐 Im ...

  3. 阿里开源自用 OpenJDK 版本,Java 社区迎来中国力量

    阿里开源自用 OpenJDK 版本,Java 社区迎来中国力量 3 月 21 日,阿里巴巴将宣布开源 Alibaba Dragonwell.届时,开发者可通过阿里云开发者中心及 Github 社区下载 ...

  4. 设计模式——抽象工厂模式及java实现

    设计模式--抽象工厂模式及java实现 设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能. 设计模式有很多,而且也随着时间在不断增多,其中最著名的是 ...

  5. PAA房产智慧社区:解决社区管理服务的痛点难点

    社区,是社交与生活的舞台,更是家的延伸.社区之所有能够有所创新发展,得益于借助数字化和智能化.智能化给社区带来的便利体现在社区门禁可以人脸识别:AI的摄像头可以自动捕获异常的现象,便于社区管理员第一时 ...

  6. Akka.NET是Java/Scala 流行框架Akka的一个 .NET 开源移植

    Akka.NET v1.0 已发布,支持Mono Akka.NET 是Java/Scala 流行框架Akka的一个 .NET 开源移植.可用于构建高并发,分布式和容错事件驱动的应用在 .NET 和 M ...

  7. Java 社区论坛 - Sym 1.6.0 发布

    简介 Sym 是一个用 Java 写的现代化的社区论坛,欢迎来体验!(如果你需要搭建一个企业内网论坛,请使用 SymX) 非常详细的 Sym 功能点脑图 Sym 的诞生是有如下几点原因: (正版) 好 ...

  8. Java 社区论坛 - Sym 1.5.0 发布

    简介 Sym 是一个用 Java 写的实时论坛,欢迎来 体验!(如果你需要搭建一个企业内网论坛,请使用 SymX) 非常详细的 Sym 功能点脑图 如果你在搭建或者二次开发时碰到问题,欢迎加 Q 群 ...

  9. 优秀的java 社区

    并发编程网 - ifeve.com InfoQ - 促进软件开发领域知识与创新的传播开源中国 - 找到您想要的开源项目,分享和交流IBM developerWorks 中国 : IBM's resou ...

随机推荐

  1. linux enable命令学习

    shell命令用来启动或关闭shell内建命令. 通过type命令查看可以知道,enable命令本身也是一个shell内建命令. sh-# type enable enable is a shell ...

  2. oracle-TNS是什么?

    oracle 的 TNS 是什么的缩写?Transparent Network Substrate(透明网络底层,即无论底层的网络层用什么协议对于上层的应用层都是透明的,也即上层的应用层不用关心底层的 ...

  3. java—— 调用系统命令

    调用所在环境的命令 链接:http://blog.csdn.net/yy6060/article/details/6311916 1 import java.io.*; 2 class Exec{ 3 ...

  4. struts2校验器规范错误解决

    今天struts2的校验器的配置文件文件头出现了错误,配置如下: <!DOCTYPE validators PUBLIC        "-//OpenSymphony Group// ...

  5. 设计模式--迪米特法则(Lod/LKP)

    迪米特法则:(Law of Demeter, LoD),也称最少知识原则(Least Knowledge Principle, LKP) 理解:      假设两个类不必彼此直接通信,那么这两个类就不 ...

  6. [转] JSON for java入门总结

    一.JSON介绍 JSON(JavaScript Object Notation),类似于XML,是一种数据交换格式,比如JAVA产生了一个数据想要给JavaScript,则除了利用XML外,还可以利 ...

  7. Scala学习笔记之:tuple、array、Map

    [TOC] 本文<快学Scala>的笔记 tuple学习笔记 tuple的定义 对偶是元组(tuple)的最简单形态--元组是不同类型的值的聚集. 元组的值是通过将单个值包含在圆括号中构成 ...

  8. 从零开始学Hadoop系列之File System命令一

    1.Overview 文件系统(FS)shell包含多种能直接与HDFS(Hadoop Distributed File System)及Hadoop支持的其他文件系统,例如Local FS,HFTP ...

  9. jquery 滚动加载

    <html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> < ...

  10. 新闻源图片放到js里

    例子:http://www.s1979.com/jkys/20141209/2547965.html <script type="text/javascript" src=& ...