应该说设计模式是我们在写代码时候的一种被承认的较好的模式。好的设计模式就像是给代码造了一个很好的骨架,在这个骨架里,你可以知道心在哪里,肺在哪里,因为大多数人都认识这样的骨架,就有了很好的传播性。这是从易读和易传播来感知设计模式的好处。当然设计模式本身更重要的是设计原则的一种实现,比如开闭原则,依赖倒置原则,这些是在代码的修改和扩展上说事。说到底就是人类和代码发生关系的四种场合:阅读,修改,增加,删除。让每一种场合都比较舒服的话,就需要用设计模式。
下面来简单列举Spring中的设计模式:
1. 简单工厂
又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。
简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。
Spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得Bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。
2. 工厂方法(Factory Method)
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。
Spring中的FactoryBean就是典型的工厂方法模式。如下图:
3. 单例(Singleton)
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
Spring中的单例模式完成了后半句话,即提供了全局的访问点BeanFactory。但没有从构造器级别去控制单例,这是因为Spring管理的是是任意的Java对象。
4. 适配器(Adapter)
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
Spring中在对于AOP的处理中有Adapter模式的例子,见如下图:
由于Advisor链需要的是MethodInterceptor对象,所以每一个Advisor中的Advice都要适配成对应的MethodInterceptor对象。
5.包装器(Decorator)
动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。
Spring中用到的包装器模式在类名上有两种表现:一种是类名中含有Wrapper,另一种是类名中含有Decorator。基本上都是动态地给一个对象添加一些额外的职责。
6. 代理(Proxy)
为其他对象提供一种代理以控制对这个对象的访问。
从结构上来看和Decorator模式类似,但Proxy是控制,更像是一种对功能的限制,而Decorator是增加职责。
Spring的Proxy模式在aop中有体现,比如JdkDynamicAopProxy和Cglib2AopProxy。
7.观察者(Observer)
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
Spring中Observer模式常用的地方是listener的实现。如ApplicationListener。
8. 策略(Strategy)
定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。
Spring中在实例化对象的时候用到Strategy模式,见如下图:
在SimpleInstantiationStrategy中有如下代码说明了策略模式的使用情况:
9.模板方法(Template Method)
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
Template Method模式一般是需要继承的。这里想要探讨另一种对Template Method的理解。Spring中的JdbcTemplate,在用这个类时并不想去继承这个类,因为这个类的方法太多,但是我们还是想用到JdbcTemplate已有的稳定的、公用的数据库连接,那么我们怎么办呢?我们可以把变化的东西抽出来作为一个参数传入JdbcTemplate的方法中。但是变化的东西是一段代码,而且这段代码会用到JdbcTemplate中的变量。怎么办?那我们就用回调对象吧。在这个回调对象中定义一个操纵JdbcTemplate中变量的方法,我们去实现这个方法,就把变化的东西集中到这里了。然后我们再传入这个回调对象到JdbcTemplate,从而完成了调用。这可能是Template Method不需要继承的另一种实现方式吧。
以下是一个具体的例子:
JdbcTemplate中的execute方法:
JdbcTemplate执行execute方法:
http://sishuok.com/forum/posts/list/7602.html[/b][/size]
相关推荐
在传统的编程模式中,对象通常会自行创建或查找它们依赖的对象,这导致了代码间的紧密耦合。Spring通过DI将这种耦合度降低,使得组件之间的关系由外部容器管理,而不是由组件自身决定。具体来说,容器负责创建对象、...
当一个对象的改变同时会影响其他对象的行为的时候,可以使用此设计模式。 l 主题对象 :一个需要被关注的主题对象,这个主题对象改变会影响其他对象的行为 l 订阅对象:当主题对象发生改变,订阅对象需要相应处理...
【Struts2】是基于MVC(Model-View-Controller)设计模式的Java Web框架,它提供了一种组织应用程序的方式,将业务逻辑、数据展示和用户界面分离,以提高代码的可维护性和可扩展性。Struts2通过拦截器来处理请求,...
查询出列表,也就是返回list, 在我们这个例子中也就是 List<User> , 这种方式返回数据,需要在User.xml 里面配置返回的类型 resultMap, 注意不是 resultType, 而这个resultMap 所对应的应该是我们自己配置的 ...
2. **Spring配置** - 在Spring配置文件中添加Spring Security的命名空间,配置验证和授权的详细规则。 3. **数据库验证** - 用户信息通常存储在数据库中,Spring Security可以通过UserDetailsService接口与数据库...
【Java】在Java部分,面试可能涵盖基础语法、面向对象编程、集合框架、多线程、异常处理、IO流、JVM内存模型以及设计模式等方面。例如,可能会问到如何优化代码性能,如何处理并发问题,或者对Java 8的新特性如...
SpringBoot是Java生态系统中的一款流行框架,它简化了Spring应用的初始搭建以及开发过程,提供了“开箱即用”的特性,包括自动配置、内嵌Web服务器(如Tomcat)等,极大地提高了开发效率。 【描述】提到这是个人的...
初步进阶之路 :laptop:本仓库中所有文字纯原创,如果需要转载,请注明转载出处,谢谢!... :beaming_face_with_smiling_eyes:一,设计模式专题二,原始数据剖析专题三,MySQL四,弹簧)五,Redis六Java并发
而Struts2是基于MVC(Model-View-Controller)设计模式的开源框架,它简化了Servlet的使用,提供了更高级别的抽象和功能,使得开发者可以更加专注于业务逻辑。 Servlet是Java编写的应用程序,它们运行在Web服务器上...
9. 设计模式:总结Java中常用的23种设计模式的定义、使用场景和实现方式。 10. Spring/SpringMVC:介绍Spring框架的核心特性,包括IoC容器、AOP、事务管理、Spring MVC框架等。 11. SpringBoot/SpringCloud:...
- 《漫谈设计模式:从面向对象开始》:介绍了设计模式,对于软件设计至关重要,尤其是单例、工厂和代理模式。 - 《Spring 3.0就这么简单》:适合初学者快速掌握Spring框架的入门书籍。 - 《Java并发编程实战》:...
8. **设计模式**:常见的设计模式如单例模式、工厂模式、建造者模式、观察者模式、适配器模式等,以及在实际开发中的应用。 9. **JVM优化**:了解JVM内存模型(堆、栈、方法区等),垃圾回收机制(GC),以及如何...
设计模式 算法 :pencil: 操作系统 :laptop: 网络 :cloud: 数据库 :floppy_disk: Java :woman_and_man_holding_hands: JavaWeb :hot_beverage: 分布式 :sweat_droplets: 设计模式 :hammer: 《转载说明》 向优秀的大佬...
自己搭的WEB项目简易流程源,希望各位有空帮忙看一下代码,提出你们的宝贵意见和建议,使这个流程和开发更为方便,本源码未使用SSH框架,但借鉴了STRUTS,SPRING里面的一些东西,设计模式也没有怎么用,希望各位能把...
如果想要更加深入地理解本书背后的理念以及Netty 源码本身,可以系统地学习一下Java 网络编程、NIO、并发和异步编程以及相关的设计模式。 京东购买链接:https://item.jd.com/12070975.html 编辑推荐, , - Netty之...
设计模式 编程规范 开发框架 前端框架 后端框架 服务器软件 Web服务器 Web应用服务器 操作系统 计算机基础知识 Linux基础 Linux进阶 Linux优化 数据库体系 Oracle DB2 Mysql 开发工具 集成开发工具 代码管理工具 ...
骆昊还增加了数据结构、算法、大型网站架构、设计模式、UML、Spring MVC等主题的深度解析,特别关注了如hashCode方法设计、垃圾收集、并发编程和数据库事务等关键知识点。 文章在CSDN上的访问量超过5万次,并被多个...