2018-10-28 设计模式 [设计模式] 面向对象的六大原则_接口隔离原则 类间的依赖关系应该建立在最小的接口上,接口隔离原则将非常庞大、臃肿的接口拆分成更小的和更具体的接口,这样客户将会只知道他们感兴趣的方法。接口隔离原则的目的是系统解开耦合,从而容易重构、更改和重新部署。 接口隔离原则其实就是让客户端依赖的接口尽可能的小。 阅读全文…
2018-10-28 设计模式 [设计模式] 面向对象的六大原则_依赖倒置原则 依赖倒置原则指代了一种特定的解耦形式,使得高层次的模块不依赖于低层次的模块的实现细节: 高层模块不应该依赖于低层模块,两者都应该依赖其抽象 抽象不应该依赖细节 细节应该依赖抽象 也就是说,模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的。也就是面向接口编程。 如果类和类之间直接依赖于细节,那么它们之间就有直接的耦合,当具体实现需要变化时,意味着... 阅读全文…
2018-10-28 设计模式 [设计模式] 面向对象的六大原则_里氏替换原则 定义只要父类能出现的地方子类就可以出现,而且替换为子类也不会产生任何错误或异常,使用者可能根本就不需要知道是父类还是子类。 里氏替换原则的核心原理是抽象,抽象又依赖于继承这个特性。 阅读全文…
2018-10-28 设计模式 [设计模式] 面向对象的六大原则_开闭原则 定义软件中的对象(类、模块、函数等)应该对于扩展是开放的,但是对于修改时封闭的。在软件需要变化时,我们应该尽量通过扩展的方式来实现变化,而不是通过修改已有的代码来实现。 程序一旦开发完成,程序中一个类的实只应该因错误而被修改,新的或者改变的特性应该通过新建不同的类实现,新建的类可以通过继承的方式来重用原类的代码。 举例在上一节中实现的代码是通过内存缓存解决了每次从网络加载图片的问题,但是An... 阅读全文…
2018-10-28 设计模式 [设计模式] 面向对象的六大原则_单一职责原则 定义一个类中应该是一组相关性很高的函数、数据的封装,下面以一个例子为例来说,本文均来自《Android源码设计模式解析与实战》。 举例下面是一个简单的图片加载器: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849public class ImageLoader &... 阅读全文…
2018-07-29 Coding [Coding][代码整洁之道]对象与数据结构 过程式代码(使用数据结构的代码)便于在不该懂既有数据结构的前提下添加新函数,面向对象代码便于在不改动既有函数的前提下添加新类。 过程式代码难以添加新的数据结构,因为必须修改所有的函数;面向对象代码难以添加新的函数,因为必须修改所有类。 过程式代码示例: 1234567891011121314151617181920212223242526272829303132public class Sq... 阅读全文…
2018-07-29 Coding [Coding][代码整洁之道] 注释 用代码来阐述看这段代码: 1if ((employee.flags & HOURLY_FLAG) && (employee.age > 65)) 我们对其进行如下重构: 1if (employee.isEligibleForFullBenefits()) 做上面的修改之后,我们一眼就能看出代码的意图,很多时候,简单到只需要创建一个描述与注释所言同一事物的函数即可... 阅读全文…
2018-07-29 Coding [Coding][代码整洁之道]函数 短小函数的第一规则是短小,第二规则是还要更短小。 if语句、else语句、while语句等其中的代码块应该只有一行,该行大抵是一个函数调用语句。 只做一件事要判断函数是否不止做了一件事,就看是否还能再拆出一个函数。 switch语句写出短小的switch语句很难,我们可以利用多态来实现switch语句的重构。 123456789101112public Money calculatePay(... 阅读全文…
2018-07-29 Coding [Coding][代码整洁之道] 有意义的命名 名副其实变量、函数或类的名称应该已经答复了所有的大问题,它该告诉你,它为什么存在、它做什么事、应该怎么用,如果名称需要注释来补充,那就需要考虑重新命名了。 看下面这段代码: 123456789public List<int[]> getThemne() { List<int[]> list1 = new ArrayList<int[]>()... 阅读全文…
2018-04-14 C++ [C++] C语言中模拟C++多态 C语言中实现多态先看下面这段代码: 12345678910111213141516171819202122232425262728293031323334#include <stdio.h>typedef void(*FUN)();struct _A { FUN _fun; int _a;};struct _B{ _A _a_; int _b... 阅读全文…