如果你不觉得自己一年前的代码很沙雕,那你这一年也没什么进步
最近学习C++,有一个感受是首先要克服对其的陌生感以及不信任。之前用 Python 的时候,脑子里经常会想,这个特性 C++多半不支持。而且之前甚至会觉得,vector 和 string 等这些标准库一定是牺牲了性能才换取了便捷性的。现在才发现,这简直是天大的误会,也要感谢《C++ primer》一再强调尽量使用新标准中的新特性、以及标准库等,它们在实现时是有严格的性能要求的,要好过C中类似的工具或特性。
所以最近在学习《C++ primer》时常常有相见恨晚的感觉,如果当时没有被坊间C++很难的传言吓退,而是早点接触了,现在会不会不一样。今天部门内部组织优秀代码评选,听到了很多设计模式之类的东西,甚至还有同事用C来实现了面向对象的编程。印象比较深的几个概念有:里氏替换原则,开闭原则,观察者模式,测试驱动开发模式,通用状态机等等。它们对我来说还是有些遥远,所以一时无法总结太详细,就简单记录一下资料中的两种设计模式的内容吧。
以下內容參考自知乎文章:https://zhuanlan.zhihu.com/p/20540213
观察者模式面向的需求是:A对象(观察者)对B对象(被观察者)的某种变化高度敏感,需要在B变化的一瞬间做出反应。程序中采用注册(Register)或者成为订阅(Subscribe)的方式告诉被观察者:我需要你的某某状态,你要在它变化时通知我。采取这样被动的观察方式,既省去了反复检索状态的资源消耗,也能够得到最高的反馈速度。 观察者模式通常基于Subject和__Observer__接口类来设计
对于我这样连面向对象程序设计都不熟悉的人来说,设计模式实在有点高深,但是现在用不出不代表现在不能学,提前在脑海中有个概念,之后需要的时候再去精进也不失为一种策略。
以下内容参考自豆瓣:https://www.douban.com/note/151091561/
意图:允许一个对象在其状态改变时,改变它的行为。看起来对象似乎修改了它的类。
适用性: 1、一个对象的行为取决于它的状态,并且它必须在运行过程中可以根据它的状态改变它的行为; 2、一个操作中含有庞大的多分支的条件语句,并且这些分支依赖于该对象的状态;这个状态通常使用一个或多个枚举常量表示;通常,有多个操作包含这一相同的条件结构;State模式把每一个条件分支放入一个独立的类中;这使得你可以根据对象自身的情况把对象的状态作为一个对象,而且这一对象可以不依赖于其它对象而独立变化;
这一条似乎是避免了过于庞大的 if…else 语句块,在代码的坏味道中,过多的if/else语句名列其中。自己见到的业务场景中也确实有类似的情况出现,但是是否有更加深奥精妙的用途和含义,可能只能等到日后慢慢发掘了。