设计模式共有23个,且分成了三组,创建型模式;结构型模式;行为型模式。这样的分类方式还是蛮有意思的。下面就三种模式的分类以及各分类下的代表模式以及自己的一些思考总结一下。
创建型模式
给我一个类,给你一个实例化好的对象,具体我怎么做,客户端不用知道,给你可用的对象即可。创建型,应该说,使我们java开发的首要工作,因为,class是java中的基本单位,但我们需要操作便要获取class的对象。
·单例模式
1·图——代码——定义
2·优缺点
·优点:严格控制客户端怎样访问该对象,且系统中唯有一个该类的实例对象,可节约资源,提高性能。
·缺点:职责过重
3·应用场景(别人怎么说,spring怎么用,自己怎么用)
·spring框架中,属性singleton和scope属性来指定bean是否单例。
·hibernate的sessionfactory生产session的过程
4·思考
1·核心类Singlelon(如上图)中的私有变量为什么是静态的?非静态行不行?
2·核心类Singlelon(如上图)中的公有方法getInstance为什么是静态的?非静态行不行?如果不行,为什么?
结构型模式
第一步,通过创建型模式帮我们生成实例对象后,该对象结构是什么样子?及模块间的交互式什么样子?其结构型模式主要帮助我们组织类和对象的结构关系,以达到相对最佳实践。
·代理
1·图——代码——定义
定义:控制客户端访问真实对象方法的权限;
2·优缺点
优点:控制目标对象的访问权
缺点:增加类,相对而言增加复杂性
3·应用场景(别人怎么说,spring怎么用,自己怎么用)
·Spring AOP中JDK动态代理就是利用代理模式技术实现的。代理对象是通过InvocationHandler来持有对目标对象的引用的
·SSM框架中,spring与mybatis融合时,spring实际上管理的是mybatis的代理对象;
行为型模式
前两步走完后,对象有了,对象以及对象间结构有了,那对象中的行为我们是否可动态管理?对象与对象间的职责是否可进行管理?答案是的,这就是行为型模式要帮我们做的事了。
·模板
1·图——代码——定义
定义:定义一个事件的流程,该流程中包括可变和不可变部分,其中可变部分通过子类实现。
2·优缺点
·优点:使用继承来实现代码复用
3·应用场景(别人怎么说,spring怎么用,自己怎么用)
·spring中的JdbcTemplate
总结
对于三种类型的设计模式,我们可对比一张图来看:
创建型模式无非帮我们做了从类到对象的一个过程,至于他怎么创建,那是他的事,结构型模式针对的是对象以及对象间的交互方式,而行为型模式更好理解,对对象以及对象见你行为的一个管理,具体怎么管理,那也是封装的事了。so,理解就是这么简单!