我们发现设计模式在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仅仅支持面向对象开发。
(7)设计模式在比較大型的C++开源项目中用的还是比較多的,比方网络库ACE,界面库QT,游戏引擎Orge, Irrlicht等