Spring种用到的设计模式有哪些?

单例模式: bean默认都是单例的.
原型模式: 指定bean的作用域 prototype
工厂模式: beanFactory 有三种:1.简单工厂模式(也叫静态工厂) 2.工厂方法模式 3.抽象工厂模式
模板方法设计模式 jdbcTemplate onRefresh()
策略设计模式

public class XmlBeanDefinitionReader extends AbstractBeanDefinitionReader {

public class PropertiesBeanDefinitionReader extends AbstractBeanDefinitionReader {

public class GroovyBeanDefinitionReader extends AbstractBeanDefinitionReader implements GroovyObject {

观察者模式 , 即监听者模式:

写一个具体的监听器 
@Component
public class LearnListener implements ApplicationListener<ContextRefreshedEvent> {

   @Override
   public void onApplicationEvent(ContextRefreshedEvent event) {
      // 需要执行的逻辑代码,当spring容器初始化完成后就会执行该方法。
      System.out.println("监听到第一个onApplicationEvent");
      //获取所有的bean
      String[] definitionNames = event.getApplicationContext().getBeanDefinitionNames();
      for (String name : definitionNames) {
         //打印名称
         System.out.println("definitionNames的name = " + name);
      }
   }
}

@Component
public class MyListener implements ApplicationListener<MyEvent> {
   @Override
   public void onApplicationEvent(MyEvent event) {
      System.out.println("监听到第二个onApplicationEvent");
      System.out.println("监听到事件: "+event.getId()+"\t"+event.getMessage());
   }
}

适配器模式   Adapter

装饰者模式: BeanWrapper

责任链模式: 使用aop的时候, 会先生成一个拦截器链

代理模式: 动态代理

委派模式(Delegate Patter)行为模式:  源码中delegate结尾的类  如Spring MVC的DispatcherServlet. 

public class DispatcherServlet extends HttpServlet {
    private static final long serialVersionUID = 5766349180380479888L;
    private static DispatcherServlet INSTANCE;
    private static final Map<Integer, HttpHandler> handlers = new ConcurrentHashMap();
 
    public static void addHttpHandler(int port, HttpHandler processor) {
        handlers.put(port, processor);
    }
 
    public static void removeHttpHandler(int port) {
        handlers.remove(port);
    }
 
    public static DispatcherServlet getInstance() {
        return INSTANCE;
    }
 
    public DispatcherServlet() {
        INSTANCE = this;
    }
 
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        HttpHandler handler = (HttpHandler)handlers.get(request.getLocalPort());
        if (handler == null) {
            response.sendError(404, "Service not found.");
        } else {
            handler.handle(request, response);
        }
 
    }
}

委派模式的作用: 基本作用就是负责任务的调用和分配任务,跟代理模式很像,可以看做是一种特殊情况下的静态代理的全权代理

 代理模式注重过程,而委派模式注重结果

代理强调的是过程,主要是要在代理过程中加入一些动作的,而委派主要是分配和分发

委派模式对外隐藏了具体实现, 仅将委派者角色暴露给外部,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值