Spring框架中的java设计模式

 

相关文章:java 23种设计模式 深入理解 :https://www.cnblogs.com/foryang/p/5849402.html

 

1、工厂模式:在各种BeanFactory以及ApplicationContext创建中都用到了

2、模版模式:在各种BeanFactory以及ApplicationContext实现中也都用到了

      定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。 模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。通俗的说的就是有很多相同的步骤的,在某一些地方可能有一些差别适合于这种模式,如大话设计模式中说到的考试场景中,每个人的试卷都是一样的,只有答案不一样。这种场景就适合于模板方法模式。我这次自己写的是一个汽车启动的过程,每一种汽车启动的过程都基本是一样的流程,无非是这一过程中存在一些细小差别。

      相关代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

package com.roc.template;

/**

 * 汽车模型

 * 模型模式

 * @author liaowp

 *

 */

public abstract class CarModel {

     /**

      * 汽车启动

      */

     protected abstract void start();

     

     /**

      * 停车

      */

     protected abstract void stop();

      

     /**

      * 用户并不需要关注你的车怎么启动或者停下来的,可以开可以停就可以啦

      */

     final public void excet(){

         this.start();

         this.stop();

     }

}

  

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

package com.roc.template;

/**

 * 大众车

 * @author liaowp

 *

 */

public class Wcar extends CarModel{

 

    @Override

    protected void start() {

        System.out.println("大众车启动 。。。。。。。。突突突");

    }

 

    @Override

    protected void stop() {

        System.out.println("大众车停车。。。。。。。。。");

    }

}

  

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

package com.roc.template;

 

public class Ocar extends CarModel{

 

    @Override

    protected void start() {

        System.out.println("奥迪  无匙启动               突突突");

    }

 

    @Override

    protected void stop() {

        System.out.println("奥迪  停车              ");

    }

 

}

  

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

package com.roc.template;

/**

 * 客户端

 * @author liaowp

 *

 */

public class Client {

    public static void main(String[] args) {

        CarModel wcar=new Wcar();//家里的第一辆车,作为用户的我们并不需要关注车怎么启动的.子类变量变为父类。多态

        wcar.excet();

         

        //突然家里需要第二辆车了   奥迪     我们也不需要关注他怎么生产启动的   

        CarModel ocar=new Ocar();

        ocar.excet();

    }

}

  

模板方法模式适用场景

  • 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。

  • 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。这是Opdyke和Johnson所描述过的“重分解以一般化”的一个很好的例子。首先识别现有代码中的不同之处,并且将不同之处分离为新的操作。最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。

  • 控制子类扩展。模板方法只在特定点调用“hook”操作,这样就只允许在这些点进行扩展

3、单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点

  spring中的单例模式完成了后半句话,即提供了全局的访问点BeanFactory。但没有从构造器级别去控制单例,这是因为spring管理的是是任意的java对象。核心提示点:Spring下默认的bean均为singleton,可以通过singleton=“true|false” 或者 scope=“?”来指定。

4、代理模式:在Spring的Aop中,使用的Advice(通知)来增强被代理类的功能。Spring实现这一AOP功能的原理就使用代理模式(1、JDK动态代理。2、CGLib字节码生成技术代理。)对类进行方法级别的切面增强,即,生成被代理类的代理类, 并在代理类的方法前,设置拦截器,通过执行拦截器重的内容增强了代理方法的功能,实现的面向切面编程。

5、策略模式:第一个地方,加载资源文件的方式,使用了不同的方法,比如:ClassPathResourece,FileSystemResource,ServletContextResource,UrlResource但他们都有共同的借口Resource;第二个地方就是在Aop的实现中,采用了两种不同的方式,JDK动态代理和CGLIB代理;(策略模式就是将有共性的行为抽象为一个接口,其中有此种行为的声明。该接口的实现类都实现了这个行为,但是提供了不同的行为表现,也就是说都是支付,有用网银的,也有用支付宝的。在执行此类行为的类中含有该接口的引用,在执行行为前要确定该行为的表现,选择适合的执行)

6、观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。spring中Observer模式常用的地方是listener的实现。如ApplicationListener。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring框架是一个非常优秀的Java企业级应用开发框架,它整合了大量的设计模式来实现各种不同的功能。以下是几种常见的设计模式Spring框架应用: 1. 工厂模式Spring框架的BeanFactory和ApplicationContext都是基于工厂模式实现的。它们可以帮助Java应用程序在运行时动态地创建和管理对象,从而提高应用程序的灵活性和可维护性。 2. 代理模式Spring框架的AOP(面向切面编程)和事务管理都是基于代理模式实现的。它们可以帮助Java应用程序在运行时动态地增强对象的功能,从而实现更加灵活和可维护的代码结构。 3. 单例模式Spring框架的Bean默认是单例的,即在应用程序的整个生命周期只会创建一个实例。这种设计模式可以帮助Java应用程序实现内存的优化和性能的提升。 4. 观察者模式Spring框架的事件机制就是基于观察者模式实现的。它可以帮助Java应用程序实现对象间的松耦合,从而提高应用程序的灵活性和可扩展性。 5. 模板方法模式Spring框架的JdbcTemplate和HibernateTemplate都是基于模板方法模式实现的。它们可以帮助Java应用程序实现数据库访问的统一和简化,从而提高应用程序的可维护性和可扩展性。 6. 适配器模式Spring框架的HandlerAdapter和ViewResolver都是基于适配器模式实现的。它们可以帮助Java应用程序适配不同的处理器和视图,从而实现更加灵活和可维护的代码结构。 总之,Spring框架应用了大量的设计模式,这些设计模式Java应用程序的开发和维护提供了很多便利和支持。熟悉这些设计模式应用和实现方式,可以帮助开发人员更加高效地使用和扩展Spring框架

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值