文章目录
0 分享一下我的学习经历
起初的我是为了好找工作,听同学的推荐开始学习设计模式,在B站跟着马士兵老师的视频一路学了下来,将每个demo都码了一遍(完全的模仿),也做了相应的笔记。当时的感觉就是神奇,除此之外也没有别的感觉了,在之后的日常中自己写的代码里最多也就使用一个单例模式(因为简单),完全没有理解设计模式的美妙之处,然后也就不了了之了。直到工作后第一次实战去重构前辈的代码发现了有很多if-else,于是就萌生了一个想法,能不能用设计模式把if-else消灭掉,在经过了很久努力之后终于利用工厂+策略消灭掉了if-else,这也是我第一次切身体会到了设计模式的美妙。随后我就将笔记逐渐转换为了思维导图(期间结合着菜鸟教程),这个过程我更多的是想复习一遍设计模式,从而可以很好的使用到我以后的工作中去。这一次的复习过程跟第一次的学习相比明显有了很大的不同,我在复习完每个模式之后都会思考一下demo中存在的一些问题,并且尝试着结合其他的设计模式去巧妙的解决。最后我想通过文章的形式和大家分享一下我的学习笔记和心得。如有不足,欢迎大家指出。
1 基本概念
设计模式代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。
设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。
这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
2 设计模式的种类
2.1 创造性
Factory Method(工厂方法)
Abstract Factory(抽象工厂)
Builder(构造器)
Prototype(原型模式/克隆模式)
Singleton(单例模式)
2.2 结构性
Adapter/Wrapper(包装器/转换器)
Bridge(桥接)
Composite(组合)
Decorator(装饰器)
Facade(门面/外观)
Flyweight(享元)
Proxy(代理)
2.3 行为型
Chain Of Responsibility(责任链)
Command(命令)
Interpreter(解释器)
Iterator(迭代器)
Mediator(调停者/中介者)
Memento(备忘录)
Observer(观察者)
State(状态模式)
Strategy(策略模式)
Template Method(模板方法)
Visitor(访问者)
3 思想
3.1 可维护性(Maintainability)
在修改功能时,需要改动的地方越少,可维护性就越好
3.2 可复用性(Reusability)
代码可以被以后重复使用,写出自己总结的类库
3.3 可扩展性(Extensibility/Scalability)
添加功能无需修改原来代码、少量修改
3.4 灵活性(Flexibility/Mobility/Adaptability)
代码接口可以灵活调用
4 六大设计原则
4.1 单一职责原则(SRP)
Single Resposibility Principle
一个类别太大、别太累,负责单一的职责
例如:Person、PersonManager
高内聚、低耦合
4.2 开闭原则(OCP)
Open-Closed Principle
对扩展开放,对修改关闭
尽量不修改原来代码的情况下进行扩展
抽象化和多态是开闭原则的关键
4.3 里氏替换原则(LSP)
Liscov Substitution Principle
所有使用父类的地方,必须能够透明的使用子类对象
4.4 依赖倒置原则(DIP)
Dependency Inversion Principle
依赖抽象、而不是依赖具体
面向抽象编程
面向接口编程
4.5 接口隔离原则(ISP)
Interface Segregation Principle
每一个接口应该承担独立的角色,不干不该自己干的事儿
避免子类实现不需要实现的方法
需要对客户提供接口的时候,只需要暴露最小的接口
4.6 迪米特法则(LOD)
Law Of Demeter
核心:尽量不要和陌生人说话
好处:和其他类的耦合度变低
对于一个对象来说,非陌生人包括以下5种:
- 对象本身this
- 以参数形式传入的对象
- 当前对象的成员对象
- 如果当前对象是一个集合,集合中的其他元素也都是朋友
- 当前对象所创建的对象
5 思维导图
6 Demo地址
https://github.com/ChenJiahao0205/design-pattern/tree/master
最后
我是通过马士兵老师的视频和菜鸟教程学习的设计模式,部分内容可能会有雷同,如有雷同,绝非巧合
想阅读更多设计模式相关文章,欢迎到我的专栏【学习笔记】、【设计模式】中去查看
在23篇设计模式文章发布完之后,我会公开完整的思维导图,点关注,不迷路~
感谢大家看到这里,文章如有不足,欢迎大家指出;彦祖点个赞吧彦祖点个赞吧彦祖点个赞吧,欢迎大家关注和转发文章!