设计模式学习(1)
内容提要
设计模式学习(1)介绍了观察者模式和发布-订阅模式,以及面向接口编程和多态性的作用。文章还提到了在静态类型语言中实现多态性的方法和一些基础知识盲区。
延伸解读
设计模式:思维而非语言
文章强调设计模式是一种与编程语言无关的思维,但某些语言因其特性对特定模式更友好。例如,动态类型语言中面向接口编程较简单,而静态类型语言需借助抽象类或接口实现多态。这提醒读者,学习设计模式应关注其核心思想,而非局限于特定语言的实现细节。
观察者与发布-订阅:同步与异步之别
观察者模式中,主题直接通知观察者,通常是同步的;发布-订阅模式通过消息队列等中间件通信,是异步的,解耦了发布者和订阅者。两者虽都定义对象间依赖关系,但适用场景不同:需要实时响应时可选观察者,需要松耦合和异步处理时可选发布-订阅。
多态:消除条件分支的利器
文章通过绘图程序示例展示多态如何消除条件分支:未使用多态时,需用if-else判断图形类型并调用相应绘制函数;使用多态后,每个图形类实现自己的draw方法,调用方只需统一调用shape.draw()。这使代码更简洁、易扩展,符合面向对象编程将行为分布到各对象的思想。
基础知识盲区:构造函数与this
文章指出几个易忽略的细节:构造函数若显式返回对象类型值,则最终返回该对象而非this;返回非引用类型时则返回this。使用call/apply时,若第一个参数为null,非严格模式下this指向宿主对象。此外,函数的length属性只读,表示形参个数,通过push.call传入函数作为this会报错。
Q&A
什么是设计模式?
设计模式是为了解决类似问题而编写的高质量代码的形式。
观察者模式和发布-订阅模式有什么区别?
观察者模式通常是同步的,观察者直接接收通知;而发布-订阅模式是异步的,通过中间件解耦发送者和接收者。
如何在静态类型语言中实现多态性?
在静态类型语言中,可以通过抽象类或接口来实现多态性,允许函数参数接受更广泛的数据类型。
面向接口编程的优势是什么?
面向接口编程可以消除条件分支句子,使代码更简洁,提高代码的可复用性和可维护性。
什么是享元模式?
享元模式是一种优化内存使用的设计模式,通过共享对象来减少内存占用。
基础知识盲区包括哪些内容?
基础知识盲区包括构造函数的返回值、this的指向问题,以及函数的length特性。