读Objective-C编程之道有感

概述

无疑设计模式是高级工程师必备技能,在一些大厂的面试中,通常二轮之后都会考察设计模式相关的知识。本文是我读设计模式一书的一些感悟,希望与读者朋友一起交流,共同提高。我将通过如下几点进行叙述:

  1. 设计模式总览,iOS端常用的设计模式有哪些。
  2. 面对需求,该如何选择设计模式。
  3. 读完就忘,如何学习设计模式。

设计模式总览

总览
如图可见,设计模式一共分为9类21种。根据不同的用途,有不同的设计方法来实现,比如说对象创建,有原型、工厂方法、抽象工厂、生成器、单例等诸多模式。面对这么多设计方式背下来是不可能的,我的记忆方法是记住上面9个类就行了,等用到了再查。你可能会问面试怎么办?好的面试官从来不会问你XX模式是如何实现的? 面试官一般会从两个方向提问。

  1. 你了解什么设计模式。
  2. 你对App架构的理解,从而引出设计模式。

我们完全没有必要去背设计模式,而是要去理解App的架构或者设计模块是的思想,根据你的需求去使用模式,面试只讲自己做过的或者理解的完全够用了。当然,要成为优秀的架构时对这些模式的灵活使用还是很重要得,特别是多个模式互相配合,设计出灵巧易于拓展的架构或者代码。

面对需求,如何选择

我们看了书,了解了这些模式,该怎么用是一个大问题,对于新手来说,看不到整个App的架构,不敢滥用设计模式。我的建议是先根据需求选择合适的模式,先用上!代码只有写出来才能知道优劣,你不尝试用,就拥有掌握不了,代码出了错,你改了,这个问题你也就理解了。我们程序员最怕的事陷入固定思维,一旦陷入固定思维,你会觉得工作无趣,没意思,这对你的职业生涯是很可怕的。所以你想学什么,就用到你的需求了,让你的leader Review, 让你的代码跑起来。

回到模式的选择,我的建议是面对你的需求,举个例子:

假如你需要对一个复杂的类做修改,这时候是不是考虑下使用装饰模式,尽量避免对原有类的修改。

假如你需要对一个对象进行复制,是不是可以从原型、工厂方法、抽象工厂中选一个合适的呢?

也就是说,开发的时候不要一头扎进业务逻辑中,偶尔的跳出来,审视一下代码,是不是可以优化一下,这很重要!!!

如何学习设计模式

我觉得最有效的学习是先阅读设计模式相关的书籍,读书不是为了让自己掌握这些知识,而是为了做到有印象。你只有对某些知识有印象才能在实践的过程中去印证,从而真正的掌握它。实践有两种方法:

  1. 使用别人的框架的时候思考一下,它为什么提供这样的接口,如果能看到源码,点进去看一下源码的设计。
  2. 去写,要勇于尝试,要跳出自己的固定思维或者思考安逸区。

比如说,我们调用UIKit或者UIFoundation框架的时候,为什么NSFileManager设计为单例? 为什么NSNumber使用抽象工厂?我们常用的KVO对监听者模式做了哪些变形?等等。如果你能带着思考写代码,那提高可能是飞速的。

工作一年之后,大家都能完成公司的需求,慢慢会有一种固定的思维行程,你的代码风格逐渐形成,通过这种风格你可以实现90%的需求,慢慢自己就懈怠了,警觉的人可能会通过跳槽来解决;有些人通过读书来解决;有些人不动于衷,久而久之变成了人们口中的熟练工,工作三年和工作一年没区别,只是更熟练。而我看来读书是最好的方式,但读完书之后要去实践,如果公司的项目没有实践的机会,那就自己写一个项目。

总结

啰啰嗦嗦说了很多,这也是我最近的一些感悟,之前我很少看书,很难静下心来读完一本书。最近我花了两周的时间读完了《Objective-C编程之道:IOS设计模式解析》,读完最后一页有一种满满的成就感,很开心,希望能读到这篇文章的朋友也能享受到这种快乐。

最后送上这本书的电子版,可以在我的公众号里面回复“资源”得到本书的电子版。相比于电子书我更喜欢纸质书,电子书一般用来快出查阅。

RiverLi的公众号