代理模式:
静态代理
动态代理
生活场景:
租房中介:中介和你
火车票黄牛:黄牛和你
媒人:媒婆和你
明星经纪人:经纪人和明星
刘德华要开演唱会(长沙)、准备工作和善后工作
动态代理:
JDK自带动态代理:基于接口,cglib.jar (全称 Code Generation Library 代码生成库),asm.jar(全称 assembly,装配)
Cglib动态代理:基于继承,Proxy,InvocationHandler
特点:
执行者、被代理人
对于被代理人来说,这件事情是一定要做的,但是我自己又不想做或者没有时间做,找代理。
需要获取到被代理的人个人资料。
总结:
做了一件什么事情呢?
字节码重组
可以做一件什么事情?
可以在每一个方法调用之前加一些代码,在方法调用之后再加一些代码
AOP:
事务代理(声明式事务,哪个方法需要加事务,哪个方法不需要加事务)
日志监听
工厂模式:
1、隐藏复杂的逻辑处理过程,只关心执行结果(new对象)
简单工厂、工厂方法、抽象工厂
单例模式:
饿汉式,懒汉式,注册登记式,静态内部类,枚举式等
生活场景:
配置文件:如果不是单例(针对于某一种功能的配置)
-
(两个配置文件中的内容一样的,则有一个是浪费的
如果是不一样的,我们就不知道以哪个为准了)
直接上级领导:(对于你来说,如果有多个领导,你到底听谁的? 选择恐惧症)
日历:(不严谨)在中国,是有两种日历同时存在的阴历(农历,一般用于指导农业生产,二十四节气)和阳历(公历,一般用于国际交流、企事业单位的工作指导)(在万千世界中,即使是一片小小的树叶,他们都是长得不一样的)
注册登记主要是在spring源码有提现,singleton bean的管理
特点:
1、保证从系统启动到系统终止,全过程只会产生一个实例。
2、当我们在应用中遇到功能性冲突的时候,需要使用单例模式。
委派模式:
What:两个角色,受托人,委托人(社会上是平等关系)
公司里面:项目经理,普通员工(法律上平等的,工作的关系,各自的职责会不一样)
干活是我的,功劳是你的(最重要的特点)
项目经理(委托人):主要职责是安排任务
普通员工(受托人):执行任务
特点:
类似于中介的功能(委托机制)
持有被委托人的引用。
不关心过程,只关心结果。
Why? 主要目的就是隐藏具体实现逻辑
IOC 容器中,有一个 Register 的东西(为了告诉我们的容器,在这个类被初始化的过程中,需要做很多
不同的逻辑处理,需要实现多个任务执行者,分别实现各自的功能)
保证结果的多样性,对于用户来是只有一种方法
策略模式:
过程不同,但结果一样。
原型模式:
数据内容完全一样,但实例不同。
模板 模式:
执行流程固定,但中间有些步骤有细微差别。
spring、mybatis、dubbo源码大量使用到这个设计模式
以上是一些总结,后期会把伪代码贴上来