设计模式-Spring中常用的设计模式
设计模式是一种思想,是一种更快更好更优雅地解决问题的一种思想。这种思想在很多优秀的框架中都有落地。比如 Spring 框架。
接下来,我将从我的角度出发,粗浅的想一下,Spring 框架中常用的一些设计模式。
Spring 框架核心解决的问题是什么呢?个人理解是为了解决对象之间复杂的依赖关系,降低耦合。或者可以这么说,做项目我们也可以什么框架都不用,实现功能的时候,创建多个类,自己去维护类什么时候创建、使用、销毁等生命周期以及类之间的关系。自己维护的很好或者功能很简单的话,也可以不使用框架。框架本身也就是一个黑盒工具而已,开源使我们可以将其白盒化。
既然Spring框架的核心内容假设是解决对象之间复杂的依赖关系。 通俗来说便是“要啥给啥”。为了实现这个目的,Spring 核心的 IOC 容器出现了,对象都放在这个容器里,需要的时候从里面取。那就涉及到几点:
1. 创建对象,保存对象,保存对象之间的关联关系
2. 获取对象
涉及到如何创建,是只创建一次还是创建多次,有关联关系,先创建A还是先创建B等。 单例模式、原型模式、工厂模式、策略模式 可以来帮忙。
工厂模式:
Spring 中的 BeanFactory、FactoryBean
单例模式 :
保证一个类仅有一个实例,并提供一个全局访问点。Spring 下默认创建的 Bean 都是单例对象。
常用的单例模式写法又有很多:最简单的就是 懒汉式了,还有 饿汉式、注册式、序列化方式、枚举方式等。
原型模式 :
Java 中的克隆对象。以某个对象为原型,复制出一个新的对象。两个对象内容相同,但是对象实例不同。
用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的***方式。
这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。
策略模式:
一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。
在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。
定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。
获取对象的时候,有策略方法,也可以通过代理进行功能增强等。策略模式、代理模式、模板方法模式、适配器模式、装饰器模式等
代理模式:
为其他对象提供一种代理以控制对这个对象的访问。从结构上来看和 装饰器模式类似, 但 Proxy 是控制,更像是一种对功能的限制,而 装饰器是增加职责。
Spring 的 AOP 代理,应该是很出名的。JdkDynamicAopProxy、Cglib2AopProxy。
模板模式:
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。比如 JdbcTemplate
适配器模式 :
将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
Spring AOP 模块对 BeforeAdvice、AfterAdvice、ThrowsAdvice 三种通知类型的支持实际上是借助适配器模式来实现的,这样的好处是使得框架允许用户向框架中加入自己想要支持的任何一种通知类型,上述三种通知类型是 Spring AOP 模块定义的,它们是 AOP 联盟定义的 Advice 的子类型。
属于结构型模式,适配类与被适配类之间没有必然联系。满足 has-a 关系。
装饰器模式 :
属于结构型模式。满足 is-a 关系。
Spring 中用到的包装器模式在类名上有两种表现:一种是类名中含有 Wrapper,另一种是类名中含有 Decorator。基本上都是动态地给一个对象添加一些额外的职责。
观察者模式:
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象 都得到通知并被自动更新。
当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。
Spring 中 Observer 模式常用的地方是 Listener 的实现。如 ApplicationListener。
两个领叫什么设计
两个领叫双领设计。
双领造型和单件具有装饰层的造型是完全不一样的,叠穿就是要明明白白给人多层次的感觉,而双领无论如何都是单层的样式,如果想要玩转潮流时尚,尽可能选择层次感简单一点的样式,如果想要玩转叠穿风格,那么就一定不能增加过于夸张的设计
浏览器不支持模板模式怎么办
浏览器不支持模板模式切换模式。
浏览器不支持模板模式,可以尝试使用兼容性视图模式。点击F12选择浏览器模式。
浏览器是用来检索、展示以及传递Web信息资源的应用程序。
ie不支持模板模式打印怎么办
解决步骤:
1、单击IE浏览器中的“工具”图标;
2、单击“安全”选项卡,并取消选中“启用保护模式”旁边的复选框,然后重新启动IE浏览器;
3、打开“安全”选项卡,单击“应用”选项,然后单击“确定”按钮;
4、关闭所有打开的IE浏览器窗口,然后重新启动IE浏览器;
5、打开任意网站,在“以管理员身份运行”时尝试打开“打印”页面,单击“打印”按钮即可。
软件设计模式之模板模式的好处是什么?
模板方法模式(Template Method Pattern),定义一个操作中的算法骨架,而将一些实现步骤延迟到子类当中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
模板方法模式是比较简单的一种设计模式,但是它却是代码复用的一项基本的技术,在类库中尤其重要,它遵循“抽象类应当拥有尽可能多的行为,应当拥有尽可能少的数据”的重构原则。作为模板的方法要定义在父类中,在方法的定义中使用到抽象方法,而只看父类的抽象方法是根本不知道怎样处理的,实际做具体处理的是子类,在子类中实现具体功能,因此不同的子类执行将会得出不同的实现结果,但是处理流程还是按照父类定制的方式。这就是模板方法的要义所在,制定算法骨架,让子类具体实现。
推荐你一本设计模式方面的优秀书籍:郑阿奇 主编的《软件秘笈-设计模式那点事》。里面讲解很到位,实例通俗易懂,看了收获很大!
祝你早日学会设计模式!
模板模式的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于模板模式和策略模式的区别、模板模式的信息别忘了在本站进行查找喔。