Spring框架中的java设计模式


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

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

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

      相关代码

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();
     }
}

  

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("大众车停车。。。。。。。。。");
    }
}

  

package com.roc.template;

public class Ocar extends CarModel{

    @Override
    protected void start() {
        System.out.println("奥迪  无匙启动               突突突");
    }

    @Override
    protected void stop() {
        System.out.println("奥迪  停车              ");
    }

}

  

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。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM