1、什么是计划模式
计划模式是⼀套被反复使⽤的、多数⼈知晓的、经太过类编⽬的、代码计划经验的总结。使⽤计划模式是为了重⽤代码、让代码更容易被他⼈理解、包管代码可靠性。
2、计划模式可以分成哪些类?
创建型:创建对象,不利用new直接实例化对象,灵活创建
布局型:通过类和接口间的继承和引用创建复杂布局的对象
行为型:类之间差别通信方式实现不偕行为
3、工厂模式
客户端不需要关注创建逻辑,只需提供传⼊⼯⼚的参数
Spring 中的 BeanFactory 使⽤简单⼯⼚模式,根据传⼊⼀个唯⼀的标识来得到 Bean 对象。
4、单例模式
饿汉式 类⼀加载就创建对象
优点:基于类加载机制制止了多线程的同步问题来包管线程安全,实例在类加载时就已经创建,因此在调用getInstance()方法时可以包管线程的安全 没有加锁,执⾏效率较⾼
缺点:不是懒加载,类加载时就初始化,浪费内存空间
懒汉式 线程不安全
优点:懒加载,使⽤的时候再创建对象
缺点:线程不安全
懒汉式 线程安全
通过 synchronized 关键字加锁包管线程安全
volatile 的两个紧张特性:可⻅性、禁⽌指令重排序
静态内部类
懒加载,线程安全,效率较⾼,实现简单
当 getInstance()⽅法被调⽤时, InnerClass 才在 Singleton 的运⾏时常量池⾥,把符号引⽤替换为直接引⽤
5、适配器模式
所谓适配器模式就是将⼀个类的接⼝,转换成客户期望的另⼀个接⼝。
提高了类的复用;组合多少关联对象形成对外提供统一服务的接口;扩展性、灵活性好
目标类必须是抽象类
InputStreamReader 和 OutputStreamWriter 是典型利用了适配器模式的类。
- InputStreamReader isr=new InputStreamReader(new FileInputStream("a.txt"));
复制代码 6、代理模式
解耦合服务提供者和使⽤者,使⽤者通过代理间接的访问服务提供者 代理模式的主要作用是扩展目标对象的功能,比如说在目标对象的某个方法执行前后你可以增加一些自界说的操作。
静态代理和动态代理的区别
动态代理更加灵活,在运行时动态天生字节码,并加载到JVM中
Spring AOP通过 Proxy.newProxyInstance 方法天生代理对象,今世理对象的方法被调用时,实际上会调用 InvocationHandler 的 invoke 方法。而我们在编写代码的时候,只需要关注切点和逻辑增强的实现
JDK动态代理 自界说 InvocationHandler 并重写invoke方法,在 invoke 方法中我们会调用原生方法(被代理类的方法)并自界说一些处理逻辑
JDK 动态代理只能代理实现了接口的类或者直接代理接口,而 CGLIB 可以代理未实现任何接口的类。
静态代理,接口一旦新增方法,目标对象和代理对象都需要进行修改,在编译时就将接口、实现类、代理类这些都变成一个个实际的class文件 每个目标类都单独创建一个代理类
7、观察者模式
观察者模式主要⽤于处理对象间的⼀对多的关系,当⼀个对象状态发⽣变化时,全部该对象的关注者均能收到状态变化通知,以进⾏相应的处理。
8、装饰器模式
对现有的类对象进⾏包裹和封装,以期望在不改变类对象及其类界说的情况下,为对象添加额外功能。
许多编程语⾔使⽤ final 终极关键字来限制对某个类的进⼀步扩展。 复⽤终极类已有⾏为的唯⼀⽅法是使⽤装饰模式: ⽤封装器对其进⾏封装。
比如I/O流中的BufferedInputStream、BufferedOutputStream
- BufferedInputStream bis=new BufferedInputStream(new FileInputStream("a.txt"));
复制代码
9、责任链模式
10、策略模式
界说了⼀系列封装了算法、⾏为的对象,他们可以相互替换。
Java.util.List 就是界说了⼀个增( add )、删( remove )、改( set )、查( indexOf )策略,⾄于实现这个策略的ArrayList 、 LinkedList 等类,只是在具体实现时采⽤了差别的算法。但因为它们策略⼀样,不考虑速度的情况下,使⽤时完全可以相互替换使⽤。
11、spring中利用了哪些计划模式
工厂模式 通过 BeanFactory创建 bean 对象
Spring 中 bean 的默认作用域就是 singleton(单例)的。
代理计划模式 AOP
观察者模式 Spring 事件驱动模型就是观察者模式很经典的一个应用。
- 界说一个事件: 实现一个继承自 ApplicationEvent,并且写相应的构造函数;
- 界说一个事件监听者:实现 ApplicationListener 接口,重写 onApplicationEvent() 方法;
- 利用事件发布者发布消息: 可以通过 ApplicationEventPublisher 的 publishEvent() 方法发布消息。
适配器模式 Spring AOP 的增强或通知(Advice)利用到了适配器模式,与之相干的接口是AdvisorAdapter
每个类型的通知都有拦截器,Spring 预界说的通知要通过对应的适配器,适配成 MethodInterceptor 接口(方法拦截器)类型的对象 ,这个MethodBeforeAdviceAdapter 通过调用 getInterceptor 方法,将 MethodBeforeAdvice 适配成 MethodBeforeAdviceInterceptor )。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |