Skip to content

《设计模式之美》阅读笔记

image-20241108191510420

面向对象

理论二:封装、抽象、继承、多态

封装(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风格的代码更易维护、易复用、易扩展(封装、继承、抽象、多态)

上次更新于: