看图学习23种设计模式(二)
访问者模式
核心思想:将数据结构和数据操作分离;
工业级应用案例:JDK中的FileVisitor类;Spring中的BeanDefinitionVisitor类;
适配器模式
工业级案例:Spring aop中MethodBeforeAdviceAdapter适配器,用于将advice转换为拦截器;
桥接模式
工业级案例:JDBC中的Driver和Connection之间是通过DriverManager类进行桥接的;
组合模式
工业级案例:mybatis中的MixedSqlNode类,JDK中的Map类等;
装饰器模式
工业级案例:JDK中的BufferInputStream;
外观模式
工业级案例:java中的javax.faces.webapp.FacesServlet类;以及Class类的forName方法等;
享元模式
工业级案例:Java String类型就实现了享元模式;Integer的缓存机制等;
代理模式
工业级应用:java提供了JDK动态代理、CGLIB动态代理,Spring中面向切面编程(AOP)也使用到了代理模式;
抽象工厂模式
工业级案例:
建造者模式
工业级案例:JDK中的StringBuilder;
工厂方法模式
工业级案例:Spring中的BeanFactory类,通过newInsyance方法来创建类;
原型模式
核心思想:通过复制对象本身来创建对象,比如java中的clone方法(浅拷贝)
工业级案例:java中的clone方法实际上是原型模式应用之一,快速创建对象;(对于String类字符串,可以认为是深拷贝)
单例模式
工业级应用:spring创建bean默认采用单例模式
优点:
节省资源消耗,如:内存开销;
有利于优化控制共享资源的访问调度,比如线程池、连接池;
实例创建上跟具有灵活可控性,因为实例的创建一般是在类内部进行的;比如懒加载、双重锁校验等等;