毕业工作已有了一段时间, 平时开发的时候都是天马行空,想怎么开发就怎么开发。虽然自己写代码的时候也有一些自己的思考,但总觉得自己的设计还是有点下里巴人的感觉。为了让自己看起来高端些, 无耻的装下x,于是写点设计模式的东西。高手的看了的话,笑笑就可以了哈。
( For beginer: 必备的uml 基础,请看http://blog.csdn.net/lh844386434/article/details/16826627)
话说常用的设计模式有23种,但是由于我用本人是在是急功近利,让我把厚厚的一本设计模式一下子全看完,并且看懂。我觉得压力还是有点像山一般的大,故本人偷奸耍滑只学习了最最常用的12种设计模式。然后慢慢的把自己学习到的东西运用到自己的项目中。
有高手说过,设计模式其实说透了就是利用了面向对象的三大特性: 封装,继承, 多态的特性。并且遵守5大设计原则:单一职责原则、封闭开放原则、里氏替换原则、依赖倒转原则、接口隔离原则。这虽然是概念性的东西,但是我真心觉得还是非常有必要学习记住并遵守。三大特性不用说了,都非常熟悉。
单一职责原则: 说白了就是一个类不要添加过多的功能,职责尽可能单一,干一件事情就最好只干那一件事情,不要花心,太花心了这个类会吃不消的。
封闭开放原则:封闭和开放是相对的。
封闭是指 ---- 一旦就这个类设计好了,功能稳定后,想添加新功能。就不要改动了原有的类。
开放是说 ----- 虽然它不能修改但是它要能扩展,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。
里氏替换原则:其子类对象可以代替父类对象,但其父类对象不能代替子类对象。也就是说父类有的功能,子类也必须有,子类不能屏蔽父类的接口。
接口隔离原则:使用多个专门的接口比使用单一的总接口要好。和单一职责原类似,就是说接口要也要专一,也不能花心。
依赖倒转原则:
A.高层次的模块不应该依赖于低层次的模块,它们都应该依赖于抽象接口。
B.抽象不应该依赖于具体,具体应该依赖于抽象。
依赖倒转原则有点意思要多说下, 假如按你有一个copy类,实现的功能是从键盘读取数据,输出到打印机。你可能这样设计
但是现在有新到需求 要求从扫描仪读取数据,输出到一个屏幕,那么这样下去,你可能又要实现一个copy2类,显然Copy类在不涉及键盘或打印机的任何环境中都是不能复用的。其中的原因就是你copy类依赖了底层模块键盘类和打印机类。所以如果copy类依赖于接口,将会出现质的转变:
copy 只是键盘打印机实现接口 reader 和 writer ,copy 只负责把reader 接口类型的数据 复制到 writer 类型的的接口对象中。这样你新的扫描仪,屏幕类也只需要实现reader 和writer 接口便可以达到copy 类的复用了。
好了理论介绍完毕,下面进入正题,模式的学习。我只整理了12种最最常用的设计模式:
单实例模式
工厂模式(简单工厂、工厂、抽象工厂)
观察者模式
适配器模式
策略模式
外观模式
装饰者模式
代理模式
模板方法
下面具体开始:
创建型:
单实例模式 http://blog.csdn.net/lh844386434/article/details/13289867
工厂模式家族(简单工厂模式, 工厂方法模式, 抽象工厂模式) http://blog.csdn.net/lh844386434/article/details/14518243
行为型:
模板方法模式: http://blog.csdn.net/lh844386434/article/details/16848059
策略模式 : http://blog.csdn.net/lh844386434/article/details/16825861
观察者模式:http://blog.csdn.net/lh844386434/article/details/18006427
命令模式:
结构型:
适配器模式: http://blog.csdn.net/lh844386434/article/details/17928331
装饰者模式: http://blog.csdn.net/lh844386434/article/details/17932039
代理模式:http://blog.csdn.net/lh844386434/article/details/18045671
外观模式:http://blog.csdn.net/lh844386434/article/details/18045753
组合模式: