23种设计模式初次总结

参考文章:https://bugstack.cn/itstack-demo-design/2020/07/12/%E9%87%8D%E5%AD%A6-Java-%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F.html

## 创建型模式

**工厂方法模式(将多种服务封装在一个类的方式中进行调用)**:将各个方法封装到一个类中进行调用。优惠券案例,通过实现类的方式确立统一规范,将不同的兑奖产品实现该类,然后通过一个工程类的方式,判断使用那种优惠模式。
**抽象工厂模式(通过抽象类的方式,整合结构类似但核心不同的实现方法)**:利用抽象和代理,通过传输类名调用不同实现类的不同方法。代码中通过传入不同的集群类型,就可以调用不同的集群下的方法。
**建造者模式(需要挑选组合几种对象为一个整体用)**:填充器和建造者,返回的数据包含多个不同的参数,填充器类用于组合各个参数,通过建造者类将不同填充的数据创建为不同的方法,按需调用。
**原型模式(需要复制或打乱顺序的时候使用)**:同一种参数分配给多个对象,需要进行复制克隆的过程就是原型模式。例如考试从题库抽题。
**单例模式(全局只需要一个类的时候使用)**:只能有一个实例是场景,(懒汉式,饿汉式,线程安全,)。单例模式主要解决的是,一个全局使用的类频繁的创建和消费,从而提升提升整体的代码的性能。
## 结构型模式
**适配器模式(将不同类型的返回信息,通过适配的方式存储到公共的接收类中)**:适配接口和属性,将不同属性的类适配为一个公共的类,将不同的接口适配为一个相同的接口。
**桥接模式(方式和手段需要连接的时候使用)**:抽象类,以来实现类, 将对象进行桥接,例如支付第三方和支付手段进行桥接。
**组合模式(需要进行多层级联判断的时候使用)**:将规则条件通过树的方式进行组合判断。
**装饰器模式(需要扩展功能并且不影响原有类)**:装饰器的核心就是在不改原有类的基础上给类新增功能,1)继承了处理接口、2)提供了构造函数、3)覆盖了方法preHandle,这样可以踢掉对子类继承的方式实现逻辑功能扩展。通过抽象类实现接口的方式进行装饰,实例类在继承抽象类。实现装饰。
**外观模式(门面模式。需要进行拦截或者进行切面变成和自定义注解的方式进行使用)**:主要解决的是降低调用方的使用接口的复杂逻辑组合。通过切面编程,对不同的接口进行拦截处理操作,例如白名单过滤等。
**享元模式(统一包装数据服务,提供工厂类操作的方式)**:主要在于共享通用对象,减少内存的使用,提升系统的访问效率。例如秒杀总的商品信息存储在redis中,并且通过redis分布式锁控制库存变化。
**代理模式**:代理模式有点像老大和小弟,也有点像分销商。主要解决的是问题是为某些资源的访问、对象的类的易用操作上提供方便使用的代理服务。通过实现同一接口类,并且引入需要代理的类,实现代理操作。
## 行为模式
**责任链模式(需要按照顺序处理的时候使用)**:重点在于如何关联链路的关联,最终的执行都是在执行在中间的关系链。通过添加next字段的方式,类似于递归。
命令模式:命令、命令实现者、命令的调用者。命令实现(菜品)、逻辑实现(厨师)、调用者(小二)。
迭代器模式:迭代器模式,常见的就是我们日常使用的iterator遍历。通过next的方式获取集合元素,同时具备对元素的删除等操作。而增强的for循环是不可以的。
中介者模式:中介者模式要解决的就是复杂功能应用之间的重复调用,在这中间添加一层中介者包装服务,对外提供简单、通用、易扩展的服务能力。例如ORM框架,mybatis,Hibernate
备忘录模式:备忘录模式是以可以恢复或者说回滚,配置、版本、悔棋为核心功能的设计模式,而这种设计模式属于行为模式。配置类,备忘录类,记录者类,管理员类。
**观察者模式(做短信,MQ消息通知的时候可以用)**:简单来讲观察者模式,就是当一个行为发生时传递信息给另外一个用户接收做出相应的处理,两者之间没有直接的耦合关联。例如MQ和短信推送的时候,由于这些都不算做是核心流程链路,所以需要通过观察者模式将代码进行分离。
**状态模式(做状态改变的时候可以用待审核,审核通过,撤销,拒绝等)**:状态模式描述的是一个行为下的多种状态变更,一般用于状态的更改与撤销
**策略模式(一个实例,多种条件处理方式的时候)**:和命令模式、适配器模式、组合模式等,在一些结构上是比较相似的,一个物品,多种策略的时候用,例商品优惠活动,满级,直减,折扣,
模版模式:模版模式也是为了解决子类通用方法,放到父类中设计的优化。让每一个子类只做子类需要完成的内容,而不需要关心其他逻辑。这样提取公用代码,行为由父类管理,扩展可变部分,也就非常有利于开发拓展和迭代。
访问者模式(同一事物,不同视角下访问的信息不同):访问者模式的核心在于同一个事物不同视角下的访问信息不同。访问者就是在观察者的基础上进行划分,不同的实体查看自己所关心的信息,及根据不同角色展示不同的数据。

 

 

 

 

 

 

 

 

 

 


发现中介者模式、外观模式和代理模式三者有点相似,画了一张图来理一理
代理模式:

B <---> 代理A(B)
门面模式:

---> C
/
B ---> A -----> D
\
---> E
中介者模式:

<---> C
/
B <---> A <---> D
\
<---> E

23种设计模式初次总结

上一篇:格式化输入函数scanf();


下一篇:ES5构造函数写法与ES6构造函数写法