设计模式备忘录
众所周知,对于程序员来说,设计模式是一门极其重要的学科。不过,由于设计模式的涉及面太广,也有很多非常抽象的概念,还是很难掌握的。要学习设计模式,最好还是能结合实际。每次做需求,尤其是一些复杂的需求,或者嗅到了烂代码味道的时候,就可以翻一遍设计模式,看看有什么可以应用的模式。所以,我总结了这篇文章,以尽量短的语言描述主要的设计模式,可能是定义中的关键部分,也可能是典型的应用场景,或者只是个英文单词,目的在于帮助回忆起每个设计模式的作用和应用场景。
基本设计原则
要说设计模式,一定要先提一遍六大基本设计原则。说白了,设计模式就是在这些原则的基础上被提炼出来得一系列最佳实践。
单一职责原则
开放封闭原则
通过扩展解决问题,而不是修改已有的实现。(写代码时可以假定变化不会发生,当出现变化时,需要抽象以隔离将来的同类变化) 修改没有破坏原有的单元测试,即可认为不违反开闭原则
里氏替换原则
子类应当能代替父类
依赖倒置原则
高层模块不能依赖低层模块;应当依赖抽象而非实现
接口隔离原则
接口尽量小
迪米特法则
类间解耦
#设计模式
工厂方法模式
定义一个用于创建对象的接口
抽象工厂模式
创建一组相关或者相互依赖的对象
单例模式
一个类只有一个实例
建造者模式
分别build实例的各个模块
原型模式
复制对象
适配器模式
处理接口不兼容
装饰器模式
动态给一个对象添加一些额外的职责,比生成子类的方式灵活
代理模式
对一些对象提供代理,以限制那些对象去访问其它对象
门面模式(外观模式) (facade)
门面中包含若干个子系统的部分或全部方法,将子系统组合后对外提供。
桥接模式
将抽象部分和实现部分抽离。一个抽象类依赖一个接口,两部分分别可以做扩展
组合模式
把一组相似的对象当作一个单一的对象
享元模式
共享对象,数据库连接池,线程池等即是用享元模式的应用
策略模式
多种不同“策略”动态切换,起到改变对象行为的效果
模板方法模式
父类定义算法的骨架,部分细节由子类实现
观察者模式
对于一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知
迭代子模式
给对象提供一个迭代器(Iterator)
责任链模式
多个对象都有机会处理请求,连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止。
命令模式
将来自客户端的请求传入一个对象,实现于“行为请求者”与“行为实现者”的解耦
备忘录模式
备忘录对象就是一个用来存储另外一个对象内部状态的快照的对象
状态模式
状态机
访问者模式
将数据结构与数据操作分离
中介者模式
用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用
解释器模式
给定一种语言,定义他的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中句子。典型场景SQL解析等