1,模板方法模式(Template Pattern)
- 定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。
- 应用实例:spring事务管理,JDBCTemplate,RedisTemplate,RocketMQTemplate依赖的顶级类。
- 优点:
1、封装不变部分,扩展可变部分。
2、提取公共代码,便于维护。
3、行为由父类控制,子类实现。
- 缺点:每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。
- 使用场景: 1、有多个子类共有的方法,且逻辑相同。 2、重要的、复杂的方法,可以考虑作为模板方法。
- 注意事项:为防止恶意操作,一般模板方法都加上 final 关键词。
2,迭代器模式(Iterator Pattern)
- 定义:把对象的遍历行为交给迭代器。
- 优点:
1、它支持以不同的方式遍历一个聚合对象。
2、迭代器简化了聚合类。
3、在同一个聚合上可以有多个遍历。
4、在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。
- 缺点:类的个数成对增加。因为这个模式分离了遍历数据和存储数据的职责
3,策略模式(Strategy Pattern)
- 意图: 解决if...else 所带来的复杂和难以维护
- 应用: 电商里面的满减策略可以使用,满件,满元,送积分,送金币,送优惠券,送抽奖机会。
4,解释器模式(Interpreter Pattern)
- 定义:对于一些固定文法构建一个解释器
- 应用:例如升级规则有多种,每种里面又有多个条件。
5,观察者模式(Observer Pattern)
- 定义:一个对象发生变化,多个对象需要得到通知。
- 关键代码:在抽象类里有一个 ArrayList 存放观察者们。
- 缺点:通知多个观察者时可能的性能问题
6,备忘录模式(Memento Pattern)
- 定义:保存一个对象的某个状态,以便在适当的状态恢复对象,一句话,后悔药。
- 关键代码:客户不与备忘录类耦合,与备忘录管理类耦合。
- 优点:为用户提供一种可恢复的机制和存档信息的封装。
- 缺点:资源占用。
7,命令模式(Command Pattern)
- 定义:将请求的调用者和接收者解耦,抽象出命令接口。
- 关键代码:定义三个角色:1、执行者 2、命令 3、调用者
8,中介者模式(Mediator Pattern)
- 定义:将网状结构分离为星型结构
- 应用:1,MVC中,C是M和V的中介者;2,聊天室是用户之间的中介
9,责任链模式(Chain of Responsibility Pattern)
- 定义:为请求创建一个接收此次请求对象的链。
- 适用场景:一个请求的处理需要多个对象当中的一个或几个协作处理。
- 应用:1,钉钉审批机制; 2,spring mvc中拿到请求后的处理器和拦截器; 3,log4j:infolog,warnlog,errlog;
10,在访问者模式(Visitor Pattern)
- 定义:将数据结构与数据操作分离
- 优点:增加新的操作很容易,即增加新的访问者。
- 缺点: 1、具体元素对访问者公布细节,违反了迪米特原则。 2、具体元素变更比较困难。 3、违反了依赖倒置原则,依赖了具体类,没有依赖抽象。
11,状态模式(State Pattern)
- 定义:允许一个对象在其内部状态改变时,改变它的行为。
- 优点:将不同的状态隔离,把各种状态的转换逻辑,分不到State的子类中,减少相互依赖。增加新的状态非常简单。
- 缺点:状态多的业务场景导致数目增加,系统变复杂。
参考:https://www.jianshu.com/p/d3cbe0b041dc,