《TypeScript图形渲染实战:2D架构设计与实现》 —2.3.9 面向接口与面向对象编程的个人感悟
2.3.9 面向接口与面向对象编程的个人感悟
到此时,来了解面向接口编程的特点是比较适合的时机。面向对象有3个要素:继承(Inheritance)、封装(Encapsulation)和多态(Polymorphism)。
继承分为接口继承和实现继承(类继承),Doom3Tokenizer就是接口继承了IDoom3Tokenzier并实现了该接口的所有方法。对于TypeScript来说,可以通过关键字来区分实现继承(extends)还是接口继承(implements)。
关于封装,笔者的理解有以下3个方面:
* 在接口中声明readonly属性,在实现类中使用get访问器来提供只读属性,这是对只读属性的封装。
* 将类内部使用的成员变量或成员方法,全部声明为private或者protected访问级别,决定是使用私有还是受保护级别的访问,依赖于你是否允许自己定义的类被继承,这是第二个封装的体现。
* 使用export导出接口,然而并没有导出实现类,让接口与实现相分离。这种情况是最高级别的隐藏,只能看到接口的方法签名,却无法了解具体的成员变量及实现细节。
关于多态,可以用一个最简单的例子来理解。例如,在调用IDoom3Tokenzier接口的moveNext方法时,实际调用的是实现类Doom3Tokenizer的moveNext方法。换句话说,就是同一个操作,作用于不同的实列对象,有不同的解释,产生不同的执行结果。其实多态是整个面向对象编程的核心,在后面章节中将会有非常多的例子来演示和了解多态。
而面向接口编程并不是一种独立的编程思想,而是附属于面向对象的编程思想,因此可以将面向接口编程看成是面向对象编程的一个子集。在实现接口时,使用的是接口继承方式,将接口与实现类相分离,从而达到更好的封装效果。对于调用方来说,不需要了解具体的实现细节,只要了解接口的含义就能让程序正常运行。
- 点赞
- 收藏
- 关注作者
评论(0)