最近在练习用双拼打字。
双拼,即每个字都用两个键打出来。
比如,“中国”这两个字,用全拼打出来的话,需要按的键是:z、h、o、n、g、g、u、o。
如果是双拼(以小鹤双拼为例),就是v、s、g、o。
这相当于很多的快捷键,一个键可以代表多个字母:
v(zh)、s(ong)、g(g)、o(uo)。
按键少了,速度自然更快,字的匹配度也会变高。
只是这些快捷键的记忆需要练习。

这种将汉字分为 声母 + 韵母 的方式,让我想到了设计模式中的依赖倒置原则。
依赖倒置原则,即面向接口编程,模块之间的依赖关系通过接口发生。
这样设计下来,接口不依赖于实现类,实现类依赖接口。
因为人类认识自然界,是先看到细节,再从细节总结出抽象,所以抽象依赖于细节。
而在这样的模式中,是先约定了抽象,然后才有的实现细节,所以细节依赖于抽象,所以这个原则叫依赖倒置。

说完依赖倒置,再来看看双拼,在这里,声母是一个接口,韵母是一个接口,所有的汉字都是这两个接口的组合。
将汉字进行这样的分类后,打字的频率固定,可能刚开始速度并没有很明显的提升,但节奏感却突飞猛进。
林语堂说,一切艺术的问题,都是节奏的问题。
当节奏感变得明朗,打字似乎也变成一种艺术。

在编程中,我想大家最讨厌的,应该就是特殊情况,要处理特殊情况,就会出现成堆的 if/else,令人头大。
这时就可以运用依赖倒置原则,使用接口来代替 if/else,上层只处理接口,每种情况对应一个接口的实现。
比如 kotlin 中,相比于 Java,没有基础类型,所有的类型都是对象这个接口的实现。
没有 void,新增了 Unit,统一了函数的参数类型,所有的参数都是类型这个接口的实现。

程序是抽象的艺术,它需要找到自己的节奏。而合适的接口,往往就是合适的节奏。

双拼、kotlin、依赖倒置相关推荐

  1. 7.12 其他面向对象设计原则3: 依赖倒置原则DIP

    其他面向对象设计原则3: 依赖倒置原则DIP  The Dependency Inversion Principle 7.1 依赖倒置原则DIP The Dependency Inversion P ...

  2. 设计模式六大原则:依赖倒置原则、为什么、多例子、分析例子、总结

    1. 依赖倒置原则的定义 高层模块不应该依赖低层模块,二者都应该依赖其抽象 抽象不应该依赖细节,细节应该依赖抽象 依赖倒转的中心思想是面向接口编程 依赖倒转原则是基于这样的设计理念: 相对于细节的多变 ...

  3. 设计原则——依赖倒置

    依赖倒置:要依赖抽象,不要依赖具体类. "倒置"的含义: 如果依赖于具体类去设计.那么画出来的图,高层组件在上面,底层组件在下面,高层组件依赖于底层组件.p138. 如果依赖抽象, ...

  4. 6大设计原则之依赖倒置原则

    依赖倒置原则: 包含三层含义: 高层模块不应该依赖低层模块,二者应该依赖抽象 抽象不应该依赖细节 细节应该依赖抽象 再精简些就是:其核心是面向接口编程 抽象:即抽象类和接口,抽象是对实现的约束,对依赖 ...

  5. 【设计模式】软件设计七大原则 ( 依赖倒置原则 | 代码示例 )

    文章目录 一.依赖倒置原则简介 二.面向实现编程代码示例 ( 反面示例 ) 1.顾客类 2.测试类 三.依赖倒置原则代码示例 ( 推荐示例 | 使用接口方法注入 IGood 实现类 ) 1.顾客类 2 ...

  6. 依赖倒置(DIP),控制反转(IoC)与依赖注入(DI)

    DIP,IoC与DI概念解析 依赖倒置 DIP(Dependency Inversion Principle) DIP的两大原则: 1.高层模块不应该依赖于低层模块,二者都应该依赖于抽象. 2.抽象不 ...

  7. ASP.NET 设计模式中依赖倒置原则

    依赖倒置原则 A.高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象. B.抽象不应该依赖于具体,具体应该依赖于抽象. 依赖倒置原则 A.高层次的模块不应该依赖于低层次的模块,他们都应该依赖于 ...

  8. 设计模式原则之依赖倒置原则

    所谓依赖倒置原则(Dependence Inversion Principle )就是要依赖于抽象,不要依赖于具体.简单的说就是对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合. ...

  9. C#软件设计——小话设计模式原则之:依赖倒置原则DIP

    前言:很久之前就想动笔总结下关于软件设计的一些原则,或者说是设计模式的一些原则,奈何被各种bootstrap组件所吸引,一直抽不开身.群里面有朋友问博主是否改行做前端了,呵呵,其实博主是想做" ...

最新文章

  1. 祝所有51cto的朋友光棍节快乐
  2. 系统超时或者服务器会话丢失,第 17 章 配置 Web 服务器(Undertow)
  3. J2EE的13个规范之(二) JDBC 及其使用
  4. 基础省选+NOI 第5部分 数论进阶
  5. 2017 ACM Arabella Collegiate Programming Contest div2的题,部分题目写个题解
  6. jquery ajax提交表单数据的两种方式
  7. Springboot整合RabbitMQ,包含direct,topic,fanout三种模式的整合
  8. Javascript基础--对象
  9. 编写 Struts2 程序 的三个步骤 手动配置
  10. Linux 以form表单形式上传文件
  11. 飞翔 nyoj195(贪心or 动态)
  12. 程序员进阶之路的10本必读书目
  13. 数据结构题集(C语言版 清华大学出版社)
  14. 【学习中】王者荣耀游戏拆解分析(1)
  15. 安服工程师的岗位职责
  16. p6spy 非常典型 启用SQL日志
  17. jupyter运行环境配置
  18. 假定系统四个进程,p1、p2、p3、p4三种资源r1、r2、r3数量分别为9、3、6在T0时刻资源分配为下表:
  19. 百度网盘网页版增加倍速播放速度
  20. Docker下ELK三部曲之三:K8S上的ELK和应用日志上报

热门文章

  1. matlab怎么标记节点,为图节点和边添加标签
  2. 这后台管理系统,有逼格!(附源码)
  3. 【Linux——配置软件仓库】
  4. input输入框按照字符数限制输入
  5. 农信银支付清算系统题库_[多选] 农信银支付清算系统中()业务只在工作日运行。...
  6. 植物大战僵尸android4版本,植物大战僵尸4
  7. go 运算符
  8. FFmpeg 时间单位与转换
  9. java 一个线程占多少内存_一个jvm线程占用多少操作系统内存
  10. 谷歌优化排名怎么做?Google SEO怎么优化?