各种设计模式的应用场景

创建型模式

  • 抽象工厂模式:
           抽象工厂模式提供了一个协议来生成一系列的相关或者独立的对象,而不用指定具体对象的类型。它使得应用程序能够和使用的框架的具体实现进行解耦。 在JDK和许多开源框架,比如Spring中随处可见,它们很容易被发现。任何用于创建对象但返回接口或抽象类的,就是抽象工厂模式了。该模式可以与策略模式结合使用。

  • 建造者模式:

       通过定义一个类来简化复杂对象的创建,该类的目的是构建另一个类的实例。构建器模式还允许实现Fluent接口。这个在业务代码中使用的场景很广泛。比如订单系统大部分项目都有,订单对象就是一个复杂对象,就可以采用建造者模式来做。

  • 工厂方法:

       只是一个返回实际类型的方法。

  • 原型模式:

       使得类的实例能够生成自身的拷贝。如果创建一个对象的实例非常复杂且耗时时,就可以使用这种模式,而不重新创建一个新的实例,拷贝一个对象并直接修改它就完事儿。这是一个大热门的设计模式。比如我们业务代码,经常要各种DTO、BO、DO、VO转换,其实就可以参考原型设计模式的思想来做。

  • 单例模式:

       用来确保类只有一个实例。还有一种方法就是使用枚举。单例是用得最多的,因为Spring的bean,默认就是单例级别的。单例模式的应用场景太多了,例如:在hibernate操作中,一个项目中一般创建一个sessionFactory对象。创建太多会造成资源的浪费

结构型模式

  • 适配器模式

       常用于将一个新接口适配旧接口,在业务代码中经常有新旧接口适配的需求,可以采用该模式。

  • 桥接模式:

       将抽象和抽象的具体实现进行解耦,这样可以使得抽象和抽象的具体实现可以独立进行变化。其实我们每天都在用到,可能却浑然不知。只要用到面向接口编程,其实都是在用桥接模式。

  • 享元模式:

       使用缓存来减少对小对象的访问时间,只要用到了缓存,基本都是在使用享元模式。用个map缓存几个对象,基本上都运用了享元的思想。

扫描二维码关注公众号,回复: 11259140 查看本文章
  • 装饰者模式:

       动态的给一个对象附加额外的功能,因此它也是子类化的一种替代方法。装饰者模式在JDK中广泛运用,例如我们常用的AOP,既有动态代理,也有装饰者的味道。

  • 门面模式:

       为一组组件,接口,抽象或子系统提供简化的接口。SLFJ日志就是门面日志,比如使用Dubbo,向外提供的服务就尽量采用门面模式,然后服务在调用各种service做聚合。

  • 组合模式:

       让客户端看起来在处理单个对象和对象的组合是平等的,换句话说,某个类型的方法同时也接受自身类型作为参数。组合模式常用于递归操作的优化上,比如每个公司都有个boss系统,都会有什么菜单的功能。比如一级菜单下有二级菜单,二级菜单又有三级菜单。删除一级菜单的时候需要不断删除子菜单,那么可以试试这个设计模式。总之,凡是有级联操作的,都可以尝试这个设计模式。

  • 代理模式:

       代理模式用于向较简单的对象代替创建复杂或耗时的对象。几乎所有的开源框架,都用到了动态代理。

行为型模式

  • 中介者模式:

       通过使用一个中间对象来进行消息分发以及减少类之间的直接依赖。业务代码使用的场景太多了。比如MQ,其实就是在用中介者模式。

  • 模板方法模式:

       让子类可以重写方法的一部分,而不是整个重写,你可以控制子类需要重写那些操作。这个模式是非常高频的模式。业务代码中经常遇到有很多相同的部分,我们可以做一个抽象类,子类来实现差异化。

  • 策略模式:

       使用这个模式来将一组算法封装成一系列对象。通过调用这些对象可以灵活的改变程序的功能,常用于优化大量的if-else

  • 责任链:

       通过把请求从一个对象传递到链条中下一个对象的方式来解除对象之间的耦合,直到请求被处理完毕。链中的对象是同一接口或抽象类的不同实现,凡是带有Filter关键词的,用到拦截器的地方基本都在用这个设计模式。

  • 迭代器模式:

       提供一个统一的方式来访问集合中的对象,这个模式中间件和基础框架中用得比较多,业务代码的话用得不多,不过JDK中的这种使用很经典。

  • 命令模式:

       将命令包装在对象中,以便可以将其存储,传递到方法中,并像任何其他对象一样返回。命令模式使用频率较高,和策略模式比较像,Activiti工作流引擎中很多地方都用到了命令模式。

  • 解释器模式:

       通常描述为该语言定义语法并使用该语法来解释该格式的语句,比较冷门。

猜你喜欢

转载自blog.csdn.net/weixin_44861399/article/details/105728250