初读设计模式,给我的感觉就是“深奥”,“天马行空”,自己基础不扎实。
于是上网找了找方法:
参考:https://www.cnblogs.com/wangfupeng1988/p/3687346.html
该如何去读设计模式
1. 前言
设计模式——最熟悉的陌生人。
很多人应该都有这种感受,早就知道设计模式,也能随口说出几种,但是不知道每种是怎么回事。或者说只知道工厂模式等几个常用,简单的。估计那也是靠记忆,而不是真正的理解。
我也有这种亲身体会,在好几年之前就知道设计模式。之前也一直抽时间学,但总是学了就忘。而且学习过程很枯燥,完全是背诵式的记忆那些类图,不是真正的理解,更别提应用了。
2. 关于“设计”
设计,就是为了更好的应对变化。没毕业时候不知道软件系统怎么会有变化,但是工作之后慢慢就会发现,变化,那叫一个天马行空。。。
一提到“设计”,大部分人可能会直接想到设计模式,而且是23种设计模式。其实这是错误的。其实学会设计、应用设计,应该分为四个层次:
2.1 面向对象
首先要了解面向对象,什么是面向对象?什么是封装、继承和多态,以及三个特点的表现形式。基础很重要。
要想充分了解面向对象,三个特点,最好还是按部就班的参考一本权威书籍,看看书上说的你是不是真的理解。看看继承和多态的表现形式你是否都知道。
如果没按部就班看过书,就不要以为自己都会了。借用某相声演员一句话:“你以为你以为的就是你以为的?”。。。
2.2 抽象与具体
如何更好的解决“变化”问题?答案是“提取抽象、隔离具体”。
什么是“抽象”? 抽象就是不变的东西,一个数据表的操作,总会有增删改查,把他们作为接口,这是不变的。
什么是“具体”? 具体是实际执行的,一个数据表的增删改查,用sqlserver、access还是oracle?可能会有变化。
我们应该依赖于抽象编程,而不是依赖于具体编程。应该把程序中的共性抽象出来,并且把具体实现的部分隔离开来,让他们都依赖于抽象,并且互不影响。这其实就是设计。
只有理解了“抽象”、“具体”、“隔离”这几个词儿,你才能真正理解设计模式。否则就别指望。
2.3 SOLID五大原则
系统设计的5大原则,简写分别是S、O、L、I、D。
- S - 类职责单一原则: 即职责划分要清晰,不同职责的不要搅和在一起。每个类应该只有一个让他发生改变的原因。
- O - 开放封闭原则: 对扩展开发,对修改封闭。即如果系统要变化,就去扩展、新增新类,不要修改现有的类。
- L - LISKOV原则: 子类应该能充分覆盖父类,并且让使用者分不出差别。
- I - 接口分离原则:每个接口只管一个功能,不要出现“胖接口”。增加功能时,要加接口,而不是改接口
- D - 依赖倒置原则:具体应该依赖于抽象,而不是抽象一来于具体,即低层要依赖于高层。
对于以上5大原则,此处不详细解释,有兴趣的可以查阅《你必须知道的.net》第二版,里面讲的非常详细。
如果详细分析这5大原则,其实他们都是围绕着“提取抽象、隔离具体”来的。
- S - 类职责单一原则: 隔离
- O - 开放封闭原则: 依赖于抽象,隔离具体
- L - LISKOV原则:抽象
- I - 接口独立原则:隔离
- D - 依赖倒置原则:依赖于抽象
2.4 设计模式
最后才是设计模式,设计模式其实是一些工具而已。
是“术”,不是“道”。如果你不明白以上那些“道”,而直接去学“术”,肯定是学一次忘一次。
在看每个设计模式的时候,你都要去向着这个方向去思考:它是不是提取了抽象、分离了具体、依赖于抽象、封装了具体? 这样一来,你就会明白了。