时隔一年,再次看看设计模式从死记硬背到初窥门径
这一年中,学习并了解了不少spring中运用到的设计模式,在此做一个总结,看看我这一年中对设计模式的使用情况
建造者模式:阅读lombok编译后的class,了解lombok是如何为我们实现建造者模式的。lombok与建造者模式
策略模式:通过springsecurity基于策略模式实现的多种登录方法。这里我印象深刻的是,只有一个统一认证接口,后续如果我们要添加新方法完全不需要修改原有逻辑,只需要继承接口,并且规范好报文传输即可。
代理模式:这个主要是通过java了解,java的基于注解开发的方式,其中的AOP思想就运用到了代理模式。java中分为GCC代理和JDK动态代理。不同的代理有不同的实现方法:jdk代理提供的是接口代理,生成一个代理类,代理类会实现接口的所有方法并且根据aop注解对其进行环绕增强。gcc代理则是提供类的代理,会生成一个目标类的子类,然后重写父类的所有增强代码,gcc代理不会因为是本类内的方法而导致失效
适配器模式:这个个人认为的最佳实践还是jdk8提供的interface的default关键字,他可以在不破坏现有代码的情况下向接口中添加新方法。
职责链模式:我一开始以为责任链模式是不表现在代码上而是逻辑上的,后面我发现spring框架也提供了责任链模式的相关方法
单例模式:单例模式中我认为最关键的还是构造方法私有化;定义静态变量存储实例,后续都只能通过读静态变量来读实例。懒汉式与饿汉式的区别在于是在第一次使用时创建(lazy-loading)还是类加载时创建。注意单例模式是需要处理一下线程安全问题的,在创建的时候要上锁
装饰器模式:这个是提供对hashMap进行线程安全的方法之一:Collections.SyncronizedMap(),他实际上是一个map的包装类,内部有一个mutex作为对象锁,每次不论进行什么操作都会触发sync(mutex)来实现加锁。当然,装饰器模式的核心是给对象添加一些额外的职责,而非类