发布说明
其实不用设计模式并非不可以,但是用好设计模式能帮助我们更好地解决实际问题。
设计模式天天都在用,但自己却无感知。
本系列文章,初衷是为了记录日常经常使用的设计模式,也给学习设计模式的同学们提供参考和查阅。
文章内容有自己的理解,也有参考网络,如有侵犯,请告知删除。
学习设计模式的重要性
设计模式最重要的是解耦。
学习设计模式是如何总结经验的,把经验为自己所用。
学设计模式也是锻炼将业务需求转换技术实现的一种非常有效的方式。
设计模式的基石
我们在学习设计模式之前,建议大家,一定要掌握好设计模式的几大原则,《设计模式之禅》一书中开篇就是讲的是设计原则;
所以在本篇文章中,在这里先对设计原则做一个回顾和总结。
设计原则 | 解释 |
---|---|
开闭原则 | 对扩展开放,对修改关闭。 |
依赖倒置原则 | 通过抽象使各个类或者模块不相互影响,实现松耦合。 |
单一职责原则 | 一个类、接口、方法只做一件事。 |
接口隔离原则 | 尽量保证接口的纯洁性,客户端不应该依赖不需要的接口。 |
迪米特法则 | 又叫最少知道原则,一个类对其所依赖的类知道得越少越好。 |
里氏替换原则 | 子类可以扩展父类的功能但不能改变父类原有的功能。 |
合成复用原则 | 尽量使用对象组合、聚合,而不使用继承关系达到代码复用的目的。 |
经典框架都在用设计模式解决问题
Spring 就是一个把设计模式用得淋漓尽致的经典框架,其实从类的命名就能看出来,我
来一一列举:
设计模式名称 | 举例 |
---|---|
工厂模式 | BeanFactory |
装饰器模式 | BeanWrapper |
代理模式 | AopProxy |
委派模式 | DispatcherServlet |
策略模式 | HandlerMapping |
适配器模式 | HandlerAdapter |
模板模式 | JdbcTemplate |
观察者模式 | ContextLoaderListener |
设计模式分类
<table style="border-collapse: collapse;border:1px solid #f6f6f6;">
<thead>
<tr>
<th>类型</th>
<th>名称</th>
<th>英文</th>
</tr>
</thead>
<tbody>
<tr>
<td rowspan="3">创建型模式</td>
<td>工厂模式</td>
<td>Factory Patterns</td>
</tr>
<tr>
<td>单例模式</td>
<td>Singleton Pattern</td>
</tr>
<tr>
<td>原型模式</td>
<td>Prototype Pattern</td>
</tr>
<tr>
<td rowspan="3">结构型模式</td>
<td>适配器模式</td>
<td>Prototype Pattern</td>
</tr>
<tr>
<td>装饰器模式</td>
<td>Decorator Pattern</td>
</tr>
<tr>
<td>代理模式</td>
<td>Proxy Pattern</td>
</tr>
<tr>
<td rowspan="4">行为型模式</td>
<td>策略模式</td>
<td>Strategy Pattern</td>
</tr>
<tr>
<td>模板模式</td>
<td>Template Pattern</td>
</tr>
<tr>
<td>委派模式</td>
<td>Delegate Pattern</td>
</tr>
<tr>
<td>观察者模式</td>
<td>Observer Pattern</td>
</tr>
</tbody>
</table>
注意
需要特别声明的是,设计模式从来都不是单个设计模式独立使用的。在实际应用中,通常是多个设计模式混合使用,你中有我,我中有你。