设计模式-概述
面向对象
特性
封装:隐藏内部实现;
继承:复用现有代码;
多态:改写对象行为。
目标
面向对象设计的目标是设计出高内聚、低耦合的应用程序,最大程度的实现程序的复用,以应对复杂的需求变化。
设计原则
单一职责原则
一个类只负责一个功能领域中的相应职责。依赖倒置原则
高层模块不应该依赖于低层模块,二者都应该依赖于抽象
抽象不应该依赖于细节,细节应当依赖于抽象。
换言之,要面向接口(抽象类)编程,而不是面向实现编程。
开闭原则
一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。接口隔离原则
使用多个专门的接口,而不使用单一的总接口。里氏替换原则
所有基类出现的地方必定能被子类替换,且功能不会发生影响。合成复用原则
尽量使用对象组合/聚合,而不是继承来达到复用的目的。迪米特原则
也叫最小知识原则,一个软件实体应当尽可能少地与其他实体发生相互作用。类与类之间的耦合度应尽量的低,这样如果类发生变化,影响才会最小。
只与直接的朋友通信,不跟陌生人说话。
开闭原则是目标,里氏代换原则是基础,依赖倒置原则是手段。设计原则的核心思想是:
隔离变化;
针对接口编程,而不是针对实现编程。
设计模式
模式
模式就是对前人积累的经验的抽象和升华。简单地说,就是从不断重复出现的事件中发现和抽象出规律,并解决同一类问题的经验总结,在软件工程领域中的模式可分为三个层次。
惯用法:
最底层,语言相关,如引用计数,智能指针,垃圾收集等。设计模式:
中层,语言无关,如工厂模式,策略模式等。架构模式:
最高层,语言无关,用于高层决策,实现架构复用,如C/S架构,B/S架构,微服务架构等。
说到设计模式就不得不提GOF的《设计模式-可复用面向对象软件的基础》这本书了,它奠定了设计模式在整个软件工程领域的基础,副标题中的可复用和面向对象两个关键词恰当的点明了设计模式的核心思想。设计模式根据其目的可分为创建型,结构型和行为型三种类型。
分类
创建型
创建型模式主要用于创建对象,主要有工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型
结构型模式主要用于处理类或对象的组合,主要有适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型
行为型模式主要用于描述对类或对象之间的交互及职责分配,主要有策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
总结
高内聚、低耦合 是面向对象设计最终要实现的目标,七大设计原则是指导方针,而设计模式是最终实践经验总结。这就像武侠小说一样,成为武林高手(高内聚、低耦合)是目标,而七大设计原则好比内功心法,设计模式就好比武功招式。学习招式是为了锤炼内功心法,当心法融汇贯通时,拈花摘叶皆可伤人,具体招式反而不再重要。当然,学了招式,在成为武林高手之前,也不能一直闭关修炼,还需要有高手过招,这就是要去学习优秀的框架了,跟高手进行思想上的碰撞。
但是,无论如何,学习招式是第一步,且行且珍惜!