设计模式
2022-09-21 17:51:26 0 举报
AI智能生成
学习的一些复盘
作者其他创作
大纲/内容
谈谈你对工厂模式的理解
工厂模式就是创建一个工厂为实现了同一个接口的类创建实例。然后客户端就可以直接拿到实例使用了。比如奶茶店 你去点奶茶你只需要告诉服务员你需要什么奶茶 奶茶店就会做好给你 你直接喝就可以了
什么是单例模式
分支主题
子主题
子主题
子主题
设计模式
创建型模式
工厂模式
简单工厂
拿手机来举例,只存在一个工厂,这个工厂可以生产各种各样的手机,又生产华为 又可以生产小米
工厂方法
工厂做一个分类,小米工厂 生产 小米手机,华为工厂生产华为手机
抽象工厂
对工厂做一个抽象,可以拓展工厂的行为,比如原来工厂只有生产手机的业务,现在加了一个生产电脑的业务,
小米工厂去实现这个抽象工厂新增的方法就可以了
小米工厂去实现这个抽象工厂新增的方法就可以了
单例模式
什么是单例模式?
单例模式是一种创建型设计模式,使用这个模式创建的对象必须保证整个系统只有 一个实例存在
实现方式(三种)
懒汉式
优点
解决饿汉式单例带来的内存浪费,只有对象在使用的时候才会被初始化
缺点
线程不安全
饿汉式
优点
在类加载的时候就初始化,创建实例对象,线程安全
缺点
所有对象类加载的时候就实例化,不确定这个对象是否会使用,造成资源浪费
双重检查锁
优点
1.保证性能
2.保证线程安全(保证此时只有一个线程在new对象)
代码
原型模式
建造者
结构型模式
代理模式
静态代理
动态代理
JDK动态代理
实现原理
JDK动态代理是通过反射去实现目标类的所有接口
实现步骤
1.Proxy.newProxyInstance(clazz.getClassLoader(), new Class[]{IPerson.class}, this);
第一个参数是类加载器
第二个参数是目标类实现的所有接口
第三个参数是实现了InvocationHandler接口的类,该类的invoke方法就是客户端调用代理类所去执行的方法
第一个参数是类加载器
第二个参数是目标类实现的所有接口
第三个参数是实现了InvocationHandler接口的类,该类的invoke方法就是客户端调用代理类所去执行的方法
2.拿到代理类
3.执行目标方法
CGlib
实现原理
CGlib的实现原理是通过代理类继承目标类的方式(private static final修饰的不能被继承),代理类重写里面所有的方法
实现步骤
1.创建一个目标类以及方法
2.创建一个接口实现MethodInterceptor,重写里面的intercept方法
3.创建一个生成代理类的方法getInstance(Object target);
代码
4.获取代理类,调用代理类的方法
动态代理的优缺点
1、优点在于能将目标对象与代理对象分离,降低系统的耦合度,易于方法的拓展,同时也能保护目标对象
2、缺点是增加了系统的复杂度,在客户端与目标对象之间多了一个代理类,调用方法变慢
JDK动态代理和CGlib的区别(面试高频)
1.JDK动态代理是通过反射来实现目标类的接口生成的代理类,而CGlib是通过继承目标类重写里面的方法
2.CGlib在运行时生成字节码文件的效率要比JDK动态代理低,它用的是ASM框架,比较复杂
3.CGlib在调用方法的时候使用的是FastClass机制,类似于索引,调用的效率比JDK的要高
装饰器模式
行为型模式
委派模式
模板方法
策略模式
0 条评论
下一页