在学习的过程中,我通常会分为三步,吸收消化、表达出来、教会他人。如果能达到通俗易懂的方式教会他人,那必定对该知识点十分熟悉。所以我也想尝试通过将设计模式给写出来、表达出来、使自己对设计模式有更加深刻的一个理解,同时也给别人参考学习。如果有不正确的地方,欢迎纠正。
设计模式体现的是一种思想,理解和掌握了设计模式,并不是说记住了 23 种设计场景和解决策略(实际上这也是很重要的一笔财富),实际上学习设计模式应该学习设计模式的思想和设计原则,等这种思想融入到了你的思想中后,你就会不自觉地使用这种思想去设计和开发,这才是最重要的。
核心思想就是要深刻的理解稳定和变化,设计模式主要就是围绕这两点,大部分的设计模式都有它的稳定点和变化点,在这两点中寻找一个隔离点来隔离变化。达到代码复用的一个效果。
1.依赖倒置原则
高层模块(稳定)不应该依赖于低层模块(变化),二者都应该依赖于抽象(稳定)。抽象(稳定)不应该依赖于变化,实现细节应该依赖于抽象(稳定)。2.开放封闭原则
对扩展开放,对更改封闭。类模块应该是可扩展的,但是不可修改3.单一职责原则
一个类应该仅有一个引起它变化的原因。变化的方向隐含着类的责任。4.Liskov 替换原则
子类必须能够替换它们的基类。继承表达类型抽象。5.接口隔离原则
不应该强迫客户程序依赖它们不用的方法。接口应该小而完备。6.对象组合优于类继承
类继承通常为“白箱复用”,对象组合通常为“黑箱复用”继承在某种程度上破坏了封装性,子类父类耦合度高。而对象组合则只要求被组合的对象具有良好定义的接口,耦合度低7.封装变化点
使用封装来创建对象之间的分界层,让设计者可以在分界的一侧进行修改,而不会对另一侧产生不良的影响,从而实现层次间的松耦合。8.面向接口编程
不将变量类型声明为某个特定的具体类,而是声明为某个接口。客户程序无需获知对象的具体类型,只需要知道对象所具有的接口。减少系统中各部分的依赖关系,从而实现“高内聚、松耦合”的类型设计方案。后面学习设计模式的时候会发现,大部分设计模式都是围绕这些方法进行设计,只要理解了设计模式的思想、设计原则、重构的方式,甚至可以忘掉设计模式固定的结构,设计出自己的模式。
根据GOF的模式分类可分为以下几种
创建型模式(5种):
工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式(7种):
适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式(11种):
策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
因为设计模式这个概念提出已经过了许多年了,有些设计模式使用的方法已经过时,甚至已经不怎么使用了,但是设计模式的思想还在。所以学习设计模式最重要的是学习它的思想。
工厂模式 抽象工厂模式 单例模式 建造者模式 模板模式 策略模式 观察者模式 装饰者模式