设计模式的六大原则html
一、开闭原则(Open Close Principle):对扩展开放对修改关闭java
二、里氏代换原则(Liskov Substitution Principle):父类出现的地方,子类也可出现git
三、依赖倒转原则(Dependence Inversion Principle):依赖抽象而不依赖具体github
四、接口隔离原则(Interface Segregation Principle):多个隔离的接口,比使用单个接口要好web
五、迪米特法则(最少知道原则)(Demeter Principle):最少知道原则。一个实体应当尽可能少的与其余实体之间发生相互做用数据库
六、合成复用原则(Composite Reuse Principle):尽可能使用合成/聚合的方式,而不是使用继承。设计模式
建立型模式(五种)架构
工厂方法模式(Factory):工厂建立对象mvc
抽象工厂模式(Abstractfactory):抽象工厂实例建立对象,工厂可修改,灵活度高框架
单例模式(Sington):适用于只须要一个对象的状况
建造者模式(Builder):建立复杂对象
原型模式(Prototype):复制对象,包括深度复制和浅度复制,深度复制重建引用对象,浅度复制不建立
结构型模式(七种)
适配器模式(Adapter):开发阶段不考虑,适用于后期维护时添加功能
装饰器模式(Decorator):扩展方法功能,可在方法执行先后加代码
代理模式(Proxy):调用引用对象方法实现自身功能
外观模式(Facade):CPU,内存,硬盘组装成电脑。组装多个对象实现自身功能。
桥接模式(Bridge):经过setXxx方法任意修改引用实例,调用一样方法实现不一样功能
组合模式(Composite):部分与总体,经常使用于表示树形结构
享元模式(Flyweight):维护资源集合,经典案例:数据库链接池,避免从新开启数据库连接的开销
行为型模式(十一种)
策略模式(Strategy):定义多个不一样的实现类,这些类实现公共接口,经过调用接口调用不一样实例获得不一样结果
模板方法模式(Template):父类定义公共方法,不一样子类重写父类抽象方法,获得不一样结果
观察者模式(Observer):目标方法被调用,通知全部观察者
迭代子模式(Interator):迭代器实现原理
责任链模式(ChainOfResponsibility):依次引用,依次执行
命令模式(Commond):各司其职,逐层调用,有点像三层架构
备忘录模式(Memento):创建原始对象副本,用于存储恢复原始对象数据
状态模式(Stage):经过改变状态,改变行为
访问者模式(Visitor):结构与操做解耦。灵活的操做,放入固定的结构中执行
中介者模式(Mediator):中介类维护对象行为。主程序直接调用中介对象便可
解释器模式(Iterpreter):定义解释类,解释包装对象
最近又看了一遍java23种设计模式,网上不少都说java有23种设计模式,可是总感受不对,像拦截器,监听器,过滤器,mvc难道不属于设计模式吗。这个问题没多大意义,就不讨论了。上次直接把这23种设计模式看完以后当时看小Demo貌似是理解了,可是怎么也不能把23种所有背下来。最近又从新看了一遍,认真的体会了一下其中的思想。其实说这句话有些牵强了,如今的水平再怎么认真也不能把设计模式的思想体会的淋漓尽致。此次与上次的不一样是,几乎不用看讲解了,看代码所有能理解小Demo的工做原理。因而试着各用一句话来总结他们。不管是深刻理解设计模式的大牛,仍是没看过设计模式的初学者。必定会有许多人看到个人总结不知所云。我只是试着按个人思路总结一下。好让本身容易记忆。各位也一样能够按本身的思路各写一句话总结。
若是想快速了解一下设计模式推荐一篇博客:http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html。对的,是了解,不是研究。我的感受设计模式并非随随便便给你举个现实中的例子就可以学好的。即便例子再生动,想理解设计模式的精髓必须深刻到代码中去。例如大多数框架开启时用到的工厂模式;Tomcat中Pipeline中Valve的责任链模式调用;StandardBase中使用代理模式引入LifecycleSupport来增长自身对生命周期的管理能力;LifecycleListener中执行各个监听器时的观察者模式。(一直还没时间研究SSHM源码只看了一点Tomcat源码只能拿Tomcat举例了)。如今本身也只是初步知道了设计模式长什么样子。真的遇到了能不能认得出来还不必定,就更谈不上深刻理解了。
我的认为设计模式的学习非一朝一夕能成的东西。它是在本身作开发看源码的工程中慢慢体会出来的。这也是本身为何总是不更新设计模式栏帖子的缘由。写个小案例,告诉你这叫XX模式,像这种帖子网上已经不少了,不必再重复了,以后在读源码的工程中遇到好的应用必定会总结到博客中的。
提供一个本身学习设计模式的思路:先看小Demo认识各类设计模式的样子,以后在读源码时再慢慢理解各类设计模式的好处。并且设计模式每每还不是单独一个出现的,例如过滤器加拦截器能实现SpringAOP的功能。知识有限能举的例子也很少,读源码时注意这一点就行。
若是想看Demo能够在网上找,也能够在我github网址(https://github.com/smallbug-vip/repo)上获取,其中大部分源码仍是从上面博客中直接拷贝的。