本篇是面向对象设计系列文章的第四篇,讲解的是设计模式中的7个比较常见的行为型模式(按照本文讲解顺序排列):
- 模板方法模式
- 策略模式
- 责任链模式
- 状态模式
- 命令模式
- 观察者模式
- 中介者模式
每天进步一点点
本篇是面向对象设计系列文章的第四篇,讲解的是设计模式中的7个比较常见的行为型模式(按照本文讲解顺序排列):
本篇读书笔记的内容大部分是来自我刚参与的掘金的读书打卡活动。这次读书打卡活动选择了《简约之美:软件设计之道》这本书。我把这几次打卡的内容作了整合,也加了一点没有在打卡活动里面写的内容构成了这篇读书笔记。
本书一共有九个章节,我抽取了10个觉得比较好的段落并附加上我个人的解读。希望读者可以有些收获。
本篇是我今年的年终总结,主要总结了自己除了工作上的一些小目标的达成情况,包括社区,读书,健身,理财这几方面。
工作方面最大的收获是来到了爱奇艺工作,来到这个平台之后所收获的不仅仅来自于自己做的事情本身,还有接触到的新同事们,新平台带给我的种种收获,感觉自己还是非常幸运的。
工作上就提到这里,下面开始是本篇的主要内容。本篇分为三个部分:
现在就从已经达成的小目标来开始介绍。
今年已经达成的几个小目标有以下几个:
我是 JKnight ,熟悉我的人都应该知道我是一名刚工作满3年的非科班 iOS 开发者,而且一直坚持写技术博客快有2年半的时间了。
其实从去年开始就一直想分享我写博客的心得,但是一直也没有找到合适的契机,刚好在今年年底前达成了掘金粉丝量过万
的小目标,索性就借着这个机会分享一下我自己关于写博客的一些收获,同时也算顺便做一个阶段性的总结。
这篇文章分为三个部分:
第一部分先简单介绍关于我的博客的一些数据:写博客的起始时间,使用的博客平台,博客内容等等。
第二部分是本篇的重点,讲解的从博客中我的收获有哪些。
第三部分罗列了几个经常从一些朋友(粉丝)中听到的关于写博客的问题以及我的回答。
本篇是面向对象设计系列文章的第三篇,讲解的是设计模式中的结构型模式:
该系列前面的两篇文章:
继上一篇的面向对象设计的六大设计原则(附 Demo 及 UML 类图),本篇是面向对象设计系列的第二个部分:面向对象设计的设计模式的第一篇文章。
最开始说一下什么是设计模式。关于设计模式的概念,有很多不同的版本,在这里说一下我个人比较赞同的一个说法:
设计模式用于在特定的条件下为一些重复出现的软件设计问题提供合理的、有效的解决方案。
去掉一些定语的修饰,这句话精简为:
设计模式为问题提供方案。
简单来看,设计模式其实就是针对某些问题的一些方案。在软件开发中,即使很多人在用不同的语言去开发不同的业务,但是很多时候这些人遇到的问题抽象出来都是相似的。一些卓越的开发者将一些常出现的问题和对应的解决方案汇总起来,总结出了这些设计模式。
因此掌握了这些设计模式,可以让我们更好地去解决开发过程中遇到的一些常见问题。而且对这些问题的解决方案的掌握程度越好,我们就越能够打破语言本身的限制去解决问题,也就是增强“软件开发的内功”。
介绍设计模式最著名的一本书莫属《设计模式 可复用面向对象软件的基础》这本书,书中共介绍了23个设计模式。而这些设计模式分为三大类:
笔者想在iOS从业第三年结束之前系统学习一下关于设计模式方面的知识。而在学习设计模式之前,觉得更有必要先学习面向对象设计(OOD:Object Oriented Design)的几大设计原则,为后面设计模式的学习打下基础。
本篇分享的就是笔者近阶段学习和总结的面向对象设计的六个设计原则:
缩写 | 英文名称 | 中文名称 |
---|---|---|
SRP | Single Responsibility Principle | 单一职责原则 |
OCP | Open Close Principle | 开闭原则 |
LSP | Liskov Substitution Principle | 里氏替换原则 |
LoD | Law of Demeter ( Least Knowledge Principle) | 迪米特法则(最少知道原则) |
ISP | Interface Segregation Principle | 接口分离原则 |
DIP | Dependency Inversion Principle | 依赖倒置原则 |
本书作者(奥野宣之)介绍了一个关于整理笔记的方法:“一元笔记法”。该方法摒弃了将笔记进行分类整理的方式,而是采用了一元化的方案:不采用分类记录的方式,而是将所有分类的笔记按照时间顺序写到一起记录。
一千个读者眼中有一千个哈姆雷特,一千名 iOS 程序员心目中就有一千套 iOS 高级面试题。本文就是笔者认为可以用来面试高级 iOS 程序员的面试题。
面试了几家公司之后,最后来到了爱奇艺(坐标上海),工作的内容是笔者个人非常感兴趣的领域。能拿到这个结果对于入行两年半&非科班的笔者来说无疑是幸运的。
本篇是《数据结构 & 算法 in Swift》系列连载的第二篇,内容分为如下两个部分:
从本文标题中的序号可以看出,本文是一个连载的开篇。
而且这个连载的标题是:数据结构 & 算法 in Swift。从这个连载的标题中可以看出,笔者分享的是使用Swift语言来实现所学的的数据结构和算法的知识。这里面需要解释两点:
学习通用性知识,突破技能瓶颈:笔者做iOS开发也有两年了,这期间通过从项目,第三方源码,相关应用类的编程书籍提高了些技术水平。而作为没学过数据结构和算法的非科班大军中的一员,这些知识始终是绕不过去的。因为对此类知识的掌握程度会对今后编程技能的提高有着无可估量的影响,所以就决定学习了。
选择哪个语言并不重要,重要的是数据结构和算法本身的理解:通过两个星期的学习,如今笔者已经可以使用Swift语言来实现几种数据结构和算法了,但我相信如果我使用C语言或者Objective-C语言的话会学得更快些,因为在实现的时候由于对该语言的不熟悉导致在实现过程中踩了不少坑。不过可以反过来思考:如果我可以使用Swift来实现这些,那么我今后用C,Objective-C,甚至是Java就容易多了,再加上我还顺便学习了Swift不是么?
如今Swift的势头还在上涨:笔者已经观察到很多新的库,教学都使用了Swift语言。而且听说一些面试的朋友在面试过程中多少有问过Swift相关的知识,一些公司的新项目也有用Swift写了。
YYCache是国内开发者ibireme开源的一个线程安全的高性能键值缓存组件,代码风格简洁清晰,在GitHub上已经有了1600+颗星。
阅读它的源码有助于建立比较完整的缓存设计的思路,同时也能巩固一下双向链表,线程锁,数据库操作相关的知识。如果你还没有看过YYCache的源码,那么恭喜你,阅读此文会对理解YYCache的源码有比较大的帮助。
该框架是一个通用的网络层,可以供给不同app的业务层调用。该框架封装了AFNetworking,而且有些地方借鉴了YTKNetwork的设计思路:以对象的形式封装并管理请求。
它在功能上支持:
GitHub链接:SJNetwork
里面附有demo
很多同行在编写代码的时候往往只关注一些宏观上的主题:架构,设计模式,数据结构等等,却忽视了一些更细节上的点:比如变量如何命名与使用,控制流的设计,以及注释的写法等等。以上这些细节上的东西可以用代码的可读性来概括。