设计模式(Design pattern)是一套被反复使用、多数人知晓的、通过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石同样。项目中合理的运用设计模式能够完美的解决不少问题,每种模式在如今中都有相应的原理来与之对应,每个模式描述了一个在咱们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被普遍应用的缘由。算法
整体来讲设计模式分为三大类:设计模式
建立型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。数据结构
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。并发
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。ui
其实还有两类:并发型模式和线程池模式。用一个图片来总体描述一下:线程
单一职责原则(SRP):任何一个对象都应给只有一个单独的职责(“低耦合,高内聚”)
里氏替换原则(LSP):在任何父类出现的地方均可以用子类替换
依赖注入原则(DIP):要依赖于抽象而不是依赖于具体实现(此原则是开闭原则的基础)
接口分离原则(ISP):不该该强迫他们的客户程序依赖他们不须要的方法
迪米特原则(LOD):一个对象应该对其余对象尽量少的了解,意思就是下降各个对象之间的耦合。
开闭原则(OCP):一个对对象对扩展是开放的,对修改是关闭的。
设计
工厂模式(Factory Pattern):在工厂模式中,客户类与工厂来是分开的,消费者任什么时候候须要产品只须要向工厂请求就好,消费者无需修改就能够接纳新产品。缺点是:当前产品修改是工厂也须要修改。建造模式(Builder Pattern):将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具备不一样表象的产品,建造模式使得产品内部表象能够独立的变化,客户没必要知道产品的内部细节。建造模式能够强制实行一种分步骤的建造过程。
工厂方法模式(Abstract Factory Pattern):在工厂方法模式中,核心工厂类再也不负责全部的产品的建立,而是将具体建立工做交给子类处理,成为一个抽象角色,仅负责给出具体工厂必须实现的接口,而不接触某款产品的实例化细节。
原型模型模式(Prototype Pattern):原型模型是经过给定一个原型对象来指明要建立的的对象类型,能够用复制这个对象的方法建立更多的对象,原型模型容许动态的增长或减小产品类。缺点是:每个类必须配备一个克隆方法。
单例模式(Singleton Pattern):确保某一个类只有一个实例,并且自行实例化并向整个系统提供这个实例单例模式。
适配器模式(Adapter Pattern):把我一个类的接口变化成客户端指望的另外一个接口。
桥接模式(Bridge Pattern):将抽象化和实现化脱耦,使得两者能够独立变化,也就是说,将他们的强关联变成弱关联,即软件系统使用的是组合/聚合关系而不是继承关系,从而使二者能够独立变化。
合成模式(Composite Pattern):将对象组合成树形结构以表示“部分-总体”的层次结构,使得用户对单个对象和组合对象的使用具备一致性
装饰者模式(Decorator Pattern):装饰者模式以客户端透明的方式扩展对象的功能,是继承方案的一个替代方案,提供了比继承更多的灵活性,动态的的给一个对象添加功能,这些功能又能够动态的撤销。可增长又一些基本功能排列组合产生很是强大的功能。
门面模式(Facade Pattern):外部与一个子系统通讯必须经过一个门面对象进行,门面模式提供一个高层次的接口,使得子系统更容易使用。每个子系统只有一个门面类,并且此门面类只有一个实例,单整个系统能够有多个门面类。
享元模式(Flyweight Pattern):使用共享对象可有效地支持大量的细粒度对象。
代理模式(Proxy pattern):给某一个对象建立一个代理对象,并由代理对象控制源对象的应用。
责任链模式(chain of responsinbleity Pattern):使多个对象有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系 。将这些对象连成一个链,并沿着这条链传递请求,知道有对象处理它为止
命令模式(cmd Pattern):将一个请求封装成一个对象,从而让你使用不一样的请求把客户端参数化,对请求排队或者记录请求日志,能够提供命令的撤销和恢复功能。
解释器模式(Interpreter Pattern):给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。
迭代子模式(Iterator Pattern):它提供一种方法访问一个容器对象中各个元素,而又不须要暴露该对象的内部细节。
调停者模式(mediator Pattern ):调停者模式包装了一系列对象相互做用的方式,使得这些对象没必要相互明显做用。从而使他们能够松散偶合。当某些对象之间的做用发生改变时,不会当即影响其余的一些对象之间的做用。保证这些做用能够彼此独立的变化。调停者模式将多对多的相互做用转化为一对多的相互做用。调停者模式将对象的行为和协做抽象化,把对象在小尺度的行为上与其余对象的相互做用分开处理。
备忘录模式(Memento Pattern):在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象以外保存这个状态,这样之后就可将该对象恢复到原来保存的状态。
观察者模式(Observer Pattern):定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则全部依赖于它的对象都会获得通知并被自动更新
状态模式(state Pattern ):当一个对象在状态改变时容许其改变行为,这个对象看起来像改变了其类。
策略模式(Strategy Pattern):定义一组算法,将每一个算法都封装起来,而且使他们之间能够互换
模板方法模式(Template Method Pattern):
访问者模式(Visitor Pattern):封装一些做用于某种数据结构中的各类元素,它能够在不改变数据结构的前提下定义做用于这些元素的新的操做代理