设计模式
目录
- 设计模式
- 1.单例模式?
- 2.代理模式?
- 3.策略模式?
- 4.工厂模式?
1.单例模式?
单例模式是Java的一种设计思想,用此模式下,某个对象在jvm只允许有一个实例,防止这个对象多次引用创建多个实例消耗内存。
- 饿汉模式:在类加载的时候就创建,用static修饰直接new出对象。在多线程下是安全的。
- 懒汉模式:在使用的时候再创建。多线程下不安全,可用sychronized修饰代码块和双重检查机制(DCL)来处理,这里对对象变量加了一个volatile关键字来修饰,保证可见性,因为jvm编译器的优化,对对象重排序,线程访问时给内存地址可能是没有实例化的,这样获取信息都是为null
2.代理模式?
代理:一般请求服务器,会直接执行核心代码返回结果即可。但我们在返回结果可以附加些功能,比如日志打印,保存等,这些都可以通过代理模式实现。
动态代理有JDK代理和cglib代理。
- JDK代理:这种代理是实现接口,在实现目标接口时,加入附加功能,通过代理类调用目标方法 实现步骤①需要有目标类且实现接口 ②创建一个代理类实现InvoationHandler接口调用invoke方法实现附加功能。③在具体调用方法前调用proxy的newProxyInstance(类加载器,目标对象接口,处理器(也是自定义的代理类))方法创建代理对象,通过代理对象调用目标方法。
- cglib代理:使用底层的字节码技术,通过字节码技术为一个类创建子类并在子类中采用方法拦截的技术拦截所有父类方法的调用,顺势加入附加逻辑。实现步骤:①需要有目标接口 ②创建代理类实现MethodInterceptor接口,重写intercept接口实现附加功能 ③先创建空字节码对象new Enhancer(),设置目标类字节码参数;再创建回调对象;利用字节码创建得到代理对象;最后调用目标类方法
大家可参考这篇:原文
3.策略模式?
- 策略模式:定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。策略模式让算法独立于使用它的客户而变化。(如刷公交卡不同人使用类型卡)
- ThreadPoolExecutor()中有个参数是需要输入拒绝策略参数,输入不同的策略方式实现不同的行为。
大家可参考这篇:原文
4.工厂模式?
工厂模式主要就是创建对象,且不让对象的逻辑暴露给客户端。下面一篇解释比较详细:
转载:原文