那天去参加面试,面试官跟我说,既然你觉得自己C++学的还不错,那么你能跟我说说你对面向对象的理解吗?最开始的一瞬间,自己有点蒙。随后,很快调整自己,想起自己之前在阅读《C++ Primer》这本书的时候,看到过书上的一些介绍,自己也试图去理解过一些,就Blablablabla讲了一堆,面试官脸上露出了笑容,我知道自己讲的应该是对的。而此时,面试官向我抛出了另外一个问题。那你知道,面向对象的特性之后,大师又总结了很多面向对象的模式,你知道吗?原来上课的时候,自己学过一些,但是由于时间的原因,我都记不清了。于是干脆说自己不知道。但是,还是觉得蛮遗憾的,学过的东西没有学牢,关键的时候没能排上用场,于是回来之后,找来一些学校资料,好好的学习一下,在这里记录之,督促自己学习、进步。
在设计模式中,有如下的一些设计原则:
1)单一职责:一个类中仅有一个引起它变化的原因。
2)开闭原则:类模块应可扩展,不可修改。这里要说明一下,扩展和修改是不同的。比如:我们要在加一种ModelDuck,那么我们写一个ModelDuck的类继承Duck,这叫扩展,不是修改。什么是修改,就好像我们开始说的那种作法,为了加一个fly的功能,我们要把所有的子类中加入不同的实现,这叫修改。
3)里氏代换原则:任何基类可以出现的地方,子类一定可以出现
4)依赖倒转原则:依赖于抽象,不依赖与具体,具体来说,就是对抽象编程,不对具体进行编程,降低客户与实现模块间的耦合
5)接口隔离原则:使用多个隔离的接口,比使用单个接口要好
6)合成复用:在一个新的对象里通过关联关系来使用一些已有的对象,使之成为新对象的一部分,新对象通过调用已有对象的方法达到复用其已有功能的目的。简言之 ,就是尽 量使用组合,减少继承。
7)迪米特法则(最少知道原则):一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。简言之,减少系统模块之间的耦合,这样当一个模块修改时,就会尽量少的影响其他模块。
在类的设计中,我们应尽量的遵循这些原则,仔细的设计每个类。