四大特性以及设计模式生态系统

面向对象四大特性

封装

常用的access specifier是private, public, protected这些。这个与访问权限是相关的,就是给成员数据或者函数实现增加访问权限。主要是避免不相干的外部函数“不小心”调用了对应的功能。

一旦赋予了权限一般来说不宜作修改。

抽象

类似论文的前言,书的目录,是对要实现的功能来一个高度概括,使用的面向对象是代码阅读者为主。抛弃细枝末节直接告诉别人,接下来准备干嘛。一般来说是功能概括。

继承

一个例子就是猫科继承哺乳动物,可以继承成员变量,减少实现。一般来说我不太喜欢继承,因为父类做了改变很容易影响子类调用。我更倾向于多采用接口,表示has A关系。因为if you walk like a duck, talk like a duck, you are a duck. 懂得自然懂。

还有我觉得应该尽量避免多重继承,对,说的就是你cpp。 我猜以前的人搞出这么一套是代码容量也是一个很需要考虑的因素,对于现代化编程来说,可读性要求更高。费了老大劲获取的收益并不大,而且增加风险,尤其菜鸡多的情况下分分钟会弃坑。照顾程序员(你下一任)情绪也是需要考虑的编码素养。

多态

一般来说就是在调用父类对象的时候可以引用子类对象。对于golang来说只能通过接口来实现。多态其实经常和抽象来一起讨论。我个人的理解多态更多着重于提供不同的实现,当然对应同一个接口而言。而抽象的目的是抽取出功能概括。

设计模式生态系统

创建型

就是创建对象时候的奇技淫巧。

  • 单例模式 (Singleton)
  • 工厂模式 (Factory)
  • 建造者模式 (Builder)
  • 原型模式 (Prototype)

结构型

就是处理不同类型对象间关系,类似居委会吧,解决对象类型矛盾,对象类型合作,黄牛票贩子,媒婆之类的。

  • 代理模式 (Proxy)
  • 桥接模式 (Bridge)
  • 装饰者模式 (Decorator)
  • 适配者模式 (Adaptor)
  • 门面模式 (Facade) (幕墙工程,干过土木的应该会知道)
  • 组合模式 (Composite)
  • 享元模式 (Flyweight)

行为型

约束对象使用场景,我觉得这个最难掌握。我觉得带着照顾小朋友、小动物的那种感觉来看会比较亲近点。

  • 观察者模式 (Observer)
  • 模版模式 (Template)
  • 策略模式 (Strategy)
  • 职责链模式 (Chain of Responsibility)
  • 迭代器模式 (Iterator)
  • 状态模式 (State)
  • 访问者模式 (Visitor)
  • 备忘录模式 (Memento)
  • 命令式模式 (Command)
  • 解释器模式 (Interpreter)
  • 中介模式 (Mediator)
Previous
Next