0
点赞
收藏
分享

微信扫一扫

设计模式-Spring



代理模式

  1. 静态代理
  2. 动态代理

生活场景:

  • 租房中介:中介和你
  • 火车票黄牛:黄牛和你
  • 媒人:媒婆和你
  • 明星经纪人:经纪人和明星
  • 刘德华要开演唱会(长沙)、准备工作和善后工作

动态代理:

  • JDK自带动态代理:基于接口,cglib.jar (全称 Code Generation Library 代码生成库),asm.jar(全称 assembly,装配)
  • Cglib动态代理:基于继承,Proxy,InvocationHandler

特点:

  • 执行者、被代理人
  • 对于被代理人来说,这件事情是一定要做的,但是我自己又不想做或者没有时间做,找代理。
  • 需要获取到被代理的人个人资料。

总结:

做了一件什么事情呢? 

字节码重组

可以做一件什么事情? 

可以在每一个方法调用之前加一些代码,在方法调用之后再加一些代码

AOP:

事务代理(声明式事务,哪个方法需要加事务,哪个方法不需要加事务)

日志监听

工厂模式:

1、隐藏复杂的逻辑处理过程,只关心执行结果(new对象)

简单工厂、工厂方法、抽象工厂

单例模式:

   饿汉式,懒汉式,注册登记式,静态内部类,枚举式等

 生活场景:

  • 配置文件:如果不是单例(针对于某一种功能的配置)
  • (两个配置文件中的内容一样的,则有一个是浪费的
    如果是不一样的,我们就不知道以哪个为准了)
  • 直接上级领导:(对于你来说,如果有多个领导,你到底听谁的? 选择恐惧症)
  • 日历:(不严谨)在中国,是有两种日历同时存在的阴历(农历,一般用于指导农业生产,二十四节气)和阳历(公历,一般用于国际交流、企事业单位的工作指导)(在万千世界中,即使是一片小小的树叶,他们都是长得不一样的)
  • 注册登记主要是在spring源码有提现,singleton bean的管理

   

特点:

1、保证从系统启动到系统终止,全过程只会产生一个实例。

2、当我们在应用中遇到功能性冲突的时候,需要使用单例模式。

委派模式:

What:两个角色,受托人,委托人(社会上是平等关系)

公司里面:项目经理,普通员工(法律上平等的,工作的关系,各自的职责会不一样)

干活是我的,功劳是你的(最重要的特点)

项目经理(委托人):主要职责是安排任务

普通员工(受托人):执行任务

特点:

  1. 类似于中介的功能(委托机制)
  2. 持有被委托人的引用。
  3. 不关心过程,只关心结果。

Why? 主要目的就是隐藏具体实现逻辑

IOC 容器中,有一个 Register 的东西(为了告诉我们的容器,在这个类被初始化的过程中,需要做很多

不同的逻辑处理,需要实现多个任务执行者,分别实现各自的功能)

保证结果的多样性,对于用户来是只有一种方法

策略模式:

过程不同,但结果一样。

设计模式-Spring_配置文件

原型模式:

数据内容完全一样,但实例不同。

设计模式-Spring_jar_02

模板 模式:

执行流程固定,但中间有些步骤有细微差别。

spring、mybatis、dubbo源码大量使用到这个设计模式

设计模式-Spring_jar_03

设计模式-Spring_jar_04

以上是一些总结,后期会把伪代码贴上来

举报

相关推荐

0 条评论