《设计模式之美》阅读笔记
面向对象
理论二:封装、抽象、继承、多态
封装(Encapsulation)
封装也叫做信息隐藏或数据访问保护。类通过暴露有限的可访问接口,授权外部仅能通过类提供的方法来访问内部的数据。
🌰:
go
type Wallet struct {
id string
createTime int64
balance int64
modifiedTime int64
}
func (w *Wallet) increaseBalance(increaseAmount int64) error {
if increaseAmount < 0 {
return errors.New("...")
}
w.balance += increaseAmount
w.modifiedTime = time.Now().UnixMilli()
return nil
}
封装的作用主要体现在两方面:
- 增加数据的访问权限,防止使用者直接对内部数据进行无检查修改
- 提高类的易用性,只将关键方法暴露给使用者,降低使用者的操作负担
抽象(Abstraction)
抽象讲究如何隐藏方法具体实现细节,让调用者只需要关心如何使用方法,并不需要方法内部是如何实现的
继承(Inheritance)
继承这个特性也是一个非常有争议的特性
少用继承,多用组合
多态(Polymorphism)
抽象地理解,同一个方法呈现出不同的行为就是多态。在Go语言中的接口可以完全支持鸭子类型,可以被用于多态的具体实现。
多态特性可以提高代码的可扩展下和复用性
理论三、四:面向对象和面向过程
面向对象:以类和对象作为组织代码的基本单元,并将封装、抽象、继承、多台四个特性作为代码设计和实现的基石
面向过程:以过程(函数、方法)作为组织代码的基本单元,以数据与方法相分离为最主要的特点
面向对象编程是以类为思考对象。在进行面向对象编程的时候,并不是一上来就去思考如何将复杂的流程拆解为一个一个方法,而是采用曲线救国的方式,先去思考如何给业务建模、如何将需求翻译为类、如何建立类与类之间的交互关系。当我们有类的设计之后,就能像搭积木一样,按照处理流程,将类组装成整个程序
OOP风格的代码更易维护、易复用、易扩展(封装、继承、抽象、多态)