Spring的设计模式快速入门干货

栏目: Java · 发布时间: 4年前

内容简介:设计模式是一套被反复使用的、多数人知晓的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。对象的创建会消耗掉系统的很多资源,所以对对象的创建进行研究,从而能够高效地创建对象就是创建型模式要探讨的问题。这里有6个具体的创建型模式可供研究,它们分别是:说明:严格来说,简单工厂模式不是GoF总结出来的23种设计模式之一。 GOF在《设计模式》一书中将工厂模式分为两类:工厂方法模式与抽象工厂模式。将简单工厂模式看为工厂方法模式的一种特例,两者归为一类。

设计模式是一套被反复使用的、多数人知晓的、代码设计经验的总结。使用 设计模式 是为了重用代码、让代码更容易被他人理解、保证代码可靠性。

设计模式的分类

1.创建型模式

对象的创建会消耗掉系统的很多资源,所以对对象的创建进行研究,从而能够高效地创建对象就是创建型模式要探讨的问题。这里有6个具体的创建型模式可供研究,它们分别是:

  • 简单工厂模式(Simple Factory)

  • 工厂方法模式(Factory Method)

  • 抽象工厂模式(Abstract Factory)

  • 建造者模式(Builder)

  • 原型模式(Prototype)

  • 单例模式(Singleton)

说明:严格来说,简单工厂模式不是GoF总结出来的23种设计模式之一。 GOF在《设计模式》一书中将工厂模式分为两类:工厂方法模式与抽象工厂模式。将简单工厂模式看为工厂方法模式的一种特例,两者归为一类。

2.结构型模式

在解决了对象的创建问题之后,对象的组成以及对象之间的依赖关系就成了开发人员关注的焦点,因为如何设计对象的结构、继承和依赖关系会影响到后续程序的维护性、代码的健壮性、耦合性等。对象结构的设计很容易体现出设计人员水平的高低,这里有7个具体的结构型模式可供研究,它们分别是:

  • 外观模式/门面模式(Facade门面模式)

  • 适配器模式(Adapter)

  • 代理模式(Proxy)

  • 装饰模式(Decorator)

  • 桥梁模式/桥接模式(Bridge)

  • 组合模式(Composite)

  • 享元模式(Flyweight)

3.行为型模式

在对象的结构和对象的创建问题都解决了之后,就剩下对象的行为问题了,如果对象的行为设计的好,那么对象的行为就会更清晰,它们之间的协作效率就会提高,这里有11个具体的行为型模式可供研究,它们分别是:

  • 模板方法模式(Template Method)

  • 观察者模式(Observer)

  • 状态模式(State)

  • 策略模式(Strategy)

  • 职责链模式(Chain of Responsibility)

  • 命令模式(Command)

  • 访问者模式(Visitor)

  • 调停者模式(Mediator)

  • 备忘录模式(Memento)

  • 迭代器模式(Iterator)

  • 解释器模式(Interpreter)

设计模式遵循的原则

  1. 开闭原则(Open Close Principle):对扩展开放,对修改关闭。

  2. 里氏代换原则(Liskov Substitution Principle):只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。

  3. 依赖倒转原则(Dependence Inversion Principle):这个是开闭原则的基础,对接口编程,依赖于抽象而不依赖于具体。

  4. 接口隔离原则(Interface Segregation Principle):使用多个隔离的借口来降低耦合度。

  5. 迪米特法则(最少知道原则)(Demeter Principle):一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。

  6. 合成复用原则(Composite Reuse Principle):尽量使用合成/聚合的方式,而不是使用继承。继承实际上破坏了类的封装性,超类的方法可能会被子类修改。

Spring中使用到的设计模式

简单工厂模式

简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。
Spring中的BeanFactory就是简单工厂模式的体现,通过getBean函数传入一个唯一的标识来获得bean对象。

工厂方法

定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
Spring中的FactoryBean就是典型的工厂方法模式。

单例模式

保证一个类仅有一个实例,并提供一个访问它的全局访问点。
Spring下默认的bean均为单例,当然也可以特殊配置为多例。

外观模式

相当于cotroller层,用户调用一个请求,只要调用cotroller即可,cotroller里面有封装各种service。调用一个cotroller会把各个service逻辑整合好,不需要暴露各个服务相关的操作!

代理模式

为其他对象提供一种代理以控制对这个对象的访问。

从结构上来看和装饰模式类似,但代理模式是控制,更像是一种对功能的限制,而装饰模式是增加职责。详解 Java 中的3种代理模式大家可以点击这里看 这篇文章

模板模式

模板模式解决的问题:代码冗余,通过模板类+业务类作为参数解决。比如JDBCTemplate,模板方法处理创建连接、处理异常、释放资源等操作,业务类执行自己的sql

策略模式

  1. Spring MVC中引用了策略模式解决了不同类型的Request,可以共用DispatchServlet.doDispach()方法。

  2. protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {

    ModelAndView mv = null;


    // Determine handler for the current request.

    mappedHandler = getHandler(processedRequest);


    // Determine handler adapter for the current request.

    HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());


    // Actually invoke the handler.

    mv = ha.handle(processedRequest, response, mappedHandler.getHandler());


    applyDefaultViewName(processedRequest, mv);

    mappedHandler.applyPostHandle(processedRequest, response, mv);

    processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException);

    }

  3. 程序会根据HandlerMapping中反馈的Handler的类型来选择对于的适配器接口的实现类,最终实现不同的处理逻辑

  4. HandlerAdapter是一个接口,所有的扩展功能类都实现这个接口的 handler()方法,这样做的好处是节省内存,用到那种类型的Handler就加载哪个Handler,而不是一股脑的全加载进来

责任链模式

  1. 可以根据业务规则配置不同顺序的拦截器(责任链)

  2. 可以根据业务规则配置不同种类的拦截器(责任链)

Spring里面配置的拦截器,按照业务的需求来按照一定的顺序自由组合起来,实现特定的业务场景

Spring的设计模式快速入门干货

喜欢就点个“在看”呗 ^_^


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

计算机是怎样跑起来的

计算机是怎样跑起来的

[日] 矢泽久雄 / 胡屹 / 人民邮电出版社 / 2015-5 / 39.00元

本书倡导在计算机迅速发展、技术不断革新的今天,回归到计算机的基础知识上。通过探究计算机的本质,提升工程师对计算机的兴趣,在面对复杂的最新技术时,能够迅速掌握其要点并灵活运用。 本书以图配文,以计算机的三大原则为开端、相继介绍了计算机的结构、手工汇编、程序流程、算法、数据结构、面向对象编程、数据库、TCP/IP 网络、数据加密、XML、计算机系统开发以及SE 的相关知识。 图文并茂,通俗......一起来看看 《计算机是怎样跑起来的》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具