概念
软件工程中,设计模式是指软件设计问题的推荐方案。 设计模式一般是描述如何组织代码和使用最佳实践来解决常见的设计问题。 设计模式是高层次的方案,与具体实现细节无关(如算法,数据结构,网页等)。 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。 设计模式可以提高代码的可重用性和可读性,增强系统的可靠性和可维护性,解决一系列的复杂问题,提高协作效率。
生活中的例子
- 餐厅点餐系统中,就是运用了工厂模式
当我们去到一个餐厅时,我们只需要通过点餐助手选择我们需要的菜品即可,后厨接到菜单信息后,只需要按照菜单要求制作即可。我们则对应工厂模式的类型选择,后厨则是每个类型的实例。
- 外卖系统,运用了代理模式。
我们需要点外卖,只需提供收货信息和收货地址,至于外卖如何送达到我们手上,我们则无需关心。外卖小哥和外卖公司就充当了代理的角色。
SOLID原则
- S – Single Responsibility Principle 单一职责原则
一个程序只做好一件事
如果功能过于复杂就拆分开,每个部分保持独立 - O – OpenClosed Principle 开放/封闭原则
对扩展开放,对修改封闭
增加需求时,扩展新代码,而非修改已有代码 - L – Liskov Substitution Principle 里氏替换原则
子类能覆盖父类
父类能出现的地方子类就能出现 - I – Interface Segregation Principle 接口隔离原则
保持接口的单一独立
类似单一职责原则,这里更关注接口 - D – Dependency Inversion Principle 依赖倒转原则
面向接口编程,依赖于抽象而不依赖于具
使用方只关注接口而不关注具体类的实现
工厂模式优点
- 创建对象的过程可能很复杂,但我们只需要关心创建结果。
- 构造函数和创建者分离, 符合“开闭原则”
- 一个调用者想创建一个对象,只要知道其名称就可以了。
- 扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。
缺点
- 添加新产品时,需要编写新的具体产品类,一定程度上增加了系统的复杂度
- 考虑到系统的可扩展性,需要引入抽象层,在客户端代码中均使用抽象层进行定义,增加了系统的抽象性和理解难度
我们不需要刻意去背设计模式,也不是必须使用设计模式来写代码,如果系统重复代码很多,或者代码耦合很高,就可引入设计模式解决。并且在编写代码之前就要考虑是否能使用设计模式,从而使代码更可读,健壮和更易维护。