什么是设计模式?
设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路,它不是语法规定,而是一套用来提高代码可复用性,可维护性,可读性,稳健性以及安全性的解决方案。
1995年,GoF(Gang of Four,四人组,四人帮)合作出版了《设计模式:可复用面向对象软件的基础》一书,共收录了23种设计模式,从此树立了软件设计模式领域的历程碑,人称【GoF设计模式】。
前人种树,后人乘凉,设计模式重点是针对面向对象的
学习设计模式的意义
设计模式的本质是面向对象设计原则的实际运用,是对类的封装性,继承性和多态性以及类的关联关系和组合关系的充分理解。
正确使用设计模式具有以下优点:
- 可以提高程序员的思维能力,编程能力和设计能力。
- 使用程序设计更加标准化,代码编制更加工程化,使软件开发效力大大提高,从而缩短软件的开发周期
- 使用设计的代码可重用性高,可读性强,可靠性高,灵活性好,可维护性强。
设计模式的基本要素
- 模式名称
- 问题
- 解决方案
- 效果
GoF 23,都有哪些设计模式?
- GoF 23
一种思维,一种态度,一种进步
- 创建型模式:
单例模式,工厂模式,抽象工厂模式,建造者模式,原型模式。
- 结构型模式:
适配器模式,桥接模式,装饰模式,组合模式,外观模式,享元模式,代理模式。
- 行为型模式:
模板方法模式,命令模式,迭代器模式,观察者模式,中介者模式,备忘录模式,解释器模式,状态模式,策略模式,责任链模式,访问者模式。
创建型模式:主要用于如何创建一个对象,将对象的创建与使用分离
结构型模式:主要用于如何将类或者对象,按照某种布局组成一些更大的结构
行为型模式:主要描述类或者对象之间如何能相互协作,共同完成单个对象无法完成 的任务
面向对象的七大原则:
OOP七大原则
- 开闭原则:对扩展开放,对修改关闭。
- 里氏替换原则:继承必须确保超类所拥有的性质在子类中仍然成立。
- 依赖倒置原则:要面向接口编程,不要面向实现编程。
- 单一职责原则:控制类的粒度大小,将对象解耦,提高其内聚性。
- 接口隔离原则:要为各个类建立他们需要的专用接口。
- 迪米特法则:只与你的直接朋友谈,不跟 “陌生人” 说话。
- 合成复用原则:尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承继承关系来实现
开闭原则:当应用需求发生改变的时候,尽量不修改原有代码,可以在其之上进行扩展
里氏替换原则:某个子类可以扩展父类的功能,尽量不要改变父类原有的功能,因为父类会影响到所有子类
依赖倒置原则:高层的模块不应依赖底层的模块,抽象不依赖细节,细节应该依赖抽象,降低程序之间的耦合性,接口比较稳定,实现存在多变,面向接口可以制定一些规范,公司架构师主要设计一些接口,规范,然后具体的细节代码由底下人来写等等例子
单一职责原则:一个对象不应该承担太多的职责,当客户端需要一些功能时,我们不应该将所有功能全交给一个对象,这样会造成代码的冗余,尽量一个方法实现一个功能,如果一个方法完成的功能太多,就称其为粗粒度
接口隔离原则:针对一些接口依赖的隔离,也是将类之间的耦合性降低,提高内聚性
迪米特法则:例如,A 依赖 B,B 依赖 C。A 想用 C 的功能,不能再让 A 依赖于 C。弊端,会产生很多想 B 这样的中介角色
合成复用原则:组合的关系是 has a 的关系,而继承是 is a,少用继承