设计模式(二)面向对象(更新中)

195 阅读2分钟

面向对象编程一种编程设计思想。当我们编程时,把对象作为编程的单位,对象包含了数据和操作数据的函数。

封装

封装也叫做信息隐藏或者数据访问包含。类通过暴露有限的访问接口,授权外部仅能通过提供的方法来访问内部信息。

JavaScript 在 ES5 里面通过函数作用域来实现封装,ES6,可以通过 public,private等关键字来实现。

举个例子。我们前端使用 Vue 这个框架,大部分时候我们是不需要知道 Vue 源码如何实现双向绑定,怎么实现各种指令,我们只需要知道怎么使用,要注意哪些事项就可以了。

抽象

封装是隐藏信息,保护数据,抽象是隐藏方法的具体实现,让调用者只关心提供的方法。

抽象是一种通用的设计思想,没有啥特异性,所以有时候并不被当做面向对象的特性之一,有时候大家直接说面向对象三大特性,忽略抽象。

继承

继承可以分为单继承和多继承,单继承是指一个子类继承一个父类,多继承是指,一个子类继承多个父类。

继承的好处就是代码复用。如果两个类有共同的属性和方法,可以把这些方法抽取到父类中,然后让子类继承父类。比如苹果和梨,都是水果,都有水果的特性。可以把抽取出一个水果的父类,让苹果和梨分别继承他们。

多态

多态是指子类可以替代父类,在实际的代码运行中,调用子类的方法实现。

鸭子类(Duck Type) 的大概意思是,当我们需要一千个鸭子嘎嘎叫的时候,我们只找到 999 个鸭子,但是同时我们找到了一个鸡,这个鸡不是咯咯叫,而是跟鸭子一样,嘎嘎叫。这个事时候我们叫当这个鸡是一个鸭子。实际上就是要把做什么和谁去做,分开。

JavaScript 是动态脚本语言,天然支持多态。

面向对象和面向过程的区别

面向过程编程是一种编程范式或者风格,他以过程作为组织代码的基本单元。以数据和方法相分离为主要特别。

面对对象相比面向过程的三大好处:

1.更适合大规模复杂开发。

2.更易用,易扩展,易维护。

3.更人性化。

参考资料

极客时间《设计模式之美》