1.设计模式一共有23种,有行为、结构、创建三种类型,常用的设计模式有单例模式,工厂模式,代理模式,责任链模式,装饰模式,策略模式等
2.策略模式:主要解决多重if判断的问题,存在共同行为但不同的策略交给不同子类实现。
3.模板方法:提供共同的骨架,相同代码放入父类,不同代码在子类实现,一般和策略模式一起使用。
4.责任链模式:客户端发出一个请求会将整个链对象顺序的执行一遍,使用场景:过滤器、工作流
5.装饰模式:不影响当前代码实现增强,使用场景:多级缓存设计、IO流
6.代理模式:在目标方法之前和之后实现处理,使用场景:RPC远程调用,事务、日志、权限控制。
7.代理分为①静态代理:需要自己编写代理类②使用反射或者字节码技术生成代理类。
8.动态代理实现方式:①JDK动态代理:采用反射机制回调,必须依赖于接口②CGLIB:采用字节码技术调用,采用重写形式。相对比来说jdk动态代理比cglib广泛,但是cglib效率比jdk代理高,使用jdk广泛的原因:动态代理是java原生就支持,其次我们项目中大多数都是采用面向接口编程。
9.Spring中如何采用jdk和cglib代理呢?需要被代理的类是否有实现过接口,如果实现了接口就采用Jdk,没有的情况下就采用cglib。
10.观察者模式:实现对代码的监听,使用场景:配置中心、MQ、zookeeper
11.单例模式:在同一个JVM中只能存在一个实例,使用场景:spring bean,servlet等
12.七种单例模式:懒汉式、饿汉式、枚举、内部类、双重校验、静态内部类、懒汉式(线程安全)
13.使用反射、序列化可以破坏一个单例,但是枚举不能被破解,相对来说是最安全的一种方式。