刚开始接触编程这行的时候看过设计模式,当时感觉学这些模式没有太大的用处,当时也看不太懂。但是随着慢慢接触这一行,经过一段时间的编程以后,再回过头来看设计模式,发现设计模式的确是太有用了。其实,感觉设计模式是前辈程序员总结下来的编程经验。
设计模式总共可以分为三大类:
1.创建型设计模式(5):工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
2.行为型设计模式(11) : 策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
3.结构型设计模式(7) : 适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
上面是我们常用的23种设计模式。
同时,设计模式还有六大原则:
1.单一职责原则(SRP):一个类只负责一个功能区域,应该仅有一个引起它变化的原因。
个人理解:单一职责原则就是要去实现高内聚、低耦合,一个类不应该承担太多的功能。开发者需要将一个功能领域中所有的功能写入类当中而不能将其他的功能写在里面,比如:一个连接数据库的工具类当中不能有其它和数据库连接不相关的工具方法。
2.开放封闭原则(ASD):类、模块、函数等应该是可以拓展的,但是不可修改,类对扩展开放,对修该关闭。
个人理解:当需求变化的时候,一个类不能满足目前的程序要求,这个时候我们需要做的不是修该代码来满足新的需求,而是在原有的模板当中增加新的功能模块来满足需求。
3.里氏替换原则(LSP):所有引用基类(父类)的地方必须能透明地使用其子类的对象。
个人理解:在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类对象的话,那么它不一定能够使用基类对象。由于使用基类对象的地方都可以使用子类对象,因此在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象。
4.依赖倒置原则(DIP):高层模块不应该依赖低层模块,两个都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象,要针对接口编程,而不是针对实现编程。
个人理解:spring里面的面像切面编程应该就是这个原理。
5.迪米特原则(LOD):一个软件实体应当尽可能少地与其他实体发生相互作用。
个人理解:这样做是为了防止代码之间的耦合。
6.接口隔离原则(ISP):一个类对另一个类的依赖应该建立在最小的接口上。
个人理解:每一个接口只应该归纳一类功能差不多的方法而不应该有各种各样的方法。我们在编写代码的时候为了方便喜欢将一个类所需要实现的所有方法都写在该类实现的一个接口里面,这样做是不对的,可以将该类所实现的方法进行分类写在不同的接口当中,然后这个类可以去实现多个接口。