设计模式其实就是对面向对象特性的应用。封装、继承和多态,其中多态是实现各种设计模式的基础。
通过接口或者抽象类编程,实现了动态扩展,不同的子类对象都可以通过接口对象调用,那么如果想添加新的具体实现,可以通过通过配置的方式实现,而不用修改代码。
并且可以实现依赖反转,并不需要在使用类中创建依赖类对象,可以采用接口注入的放入传入依赖的类对象。
创建型
单例模式
spring中bean对象默认就是单例模式的,当然也可以修改为多例模式
工厂模式
spring中的BeanFactory中的getbean就是
构造器模式
例如java中使用Builder完成创建对象
原型模式
比如spring中bean对象的scope为prototype时。
结构型
装饰器模式
作用就是增强类功能,比如spring中的注解
InputStream及其相关的具体实现类
代理模式
代理需要有代理对象和目标对象。实现的方式有静态代理和动态代理两种。spring的aop就是采用动态代理的方式实现的。
桥接模式
适配器模式
组合模式
门面模式
Facade模式。比如Tomcat中的很多容器类,还有JUnit类都是门面类。
使用场景:当我们希望封装或隐藏原系统;当我们使用原系统的功能并希望增加一些新的功能;编写新类的成本远小于所有人学会使用或者未来维护原系统所需的成本;
缺点:违反了开闭原则。如有扩展,只能直接修改代理对象。
行为型
观察者模式
比如spring和Tomcat中的各种事件监听
模板模式
jdbctemplate
策略模式
职责链模式
Tomcat和jetty中将请求交给一个个子容器来处理。
迭代器模式
状态模式