|
------------------------------------------------------------------------------------------------创建型---------------------------------------------------------------------
单例模式(Singleton)
说明
一句话总结
一个类在java虚拟机中只有一个对象,并提供一个全局访问点
生活中的例子 太阳,地球,国家主席
解决了什么问题 对象的唯一性,性能浪费太多
项目里怎么用 数据库连接对象,属性配置文件读取对象
模式结构 分为懒汉式和饿汉式
构造器私有化
对外提供方法加同步关键字
懒汉式的使用范围:对象比较大,不经常使用
饿汉式的使用范围:对象不是太大也太小,使用的比较多
框架里怎么用 Struts1的Action
JDK里面使用 java.lang.Runtime#getRuntime()
java.awt.Desktop#getDesktop()
简单的工厂模式(Factory) 说明
一句话总结 用一个方法代替new关键字
生活中的例子 衣服长,面包厂
解决了什么问题 对象产生过多,或者经常有子类替换生成
项目里是怎么用的 对于经常生成的对象,或者父子类替换的对象
模式结构 写一个对外申明的方发,方法里面用new关键字代替
框架里面的使用 Spring的核心就是工厂模式
JDK里面使用 newInstance()
-----------------------------------------------------------------------------------------------结构型---------------------------------------------------------------------
Proxy(代理模式) 说明
一句话总结 为其他对象提供一个代理,以控制对当前对象的访问
生活中的例子 房屋中介,婚姻介绍所
解决了什么问题 对象不能直接访问,或者太大资源浪费
项目里怎么用 权限,大对象的访问控制
结构模式 代理对象和被代理对象都实现同一个接口
用户访问的时候先访问代理对象,代理对象去访问被代理对象
框架里面使用 Hibernate默认从缓存里面拿对象,懒加载的对象都是代理对象
JDK里面使用 java.lang.reflect.Proxy
Adapter(适配器模式) 说明
一句话总结 把原来两个不兼容的类让他们兼容在一起工作
生活中的例子 变压器,充电器
项目里面怎么用 在使用一些旧的api的时候,没有源码,和新的不兼容
模式结构 类适配器
对象适配器
框架里怎么用的 单元测试里面的asserEquels
JDK里面使用 java.util.Arrays#asList()
Facade(外观模式) 说明
一句话总结 为系统中的一组接口提供一个统一的高层接口
生活中的例子 服务员,接待人员
解决了什么问题 对象之间的交互太多,底层接口太多
项目里面怎么用 把jdbc的很多细节封装在高层类里面
模式结构 定义一个高层接口,把很多子接口封装在这个高层接口里
客户端跟高层接口打交道就可以了
框架里使用 IBatis里面直接传入Sql就可以了,我们可以同步调用Collection,PrepareStatement
JDK里面使用 HttpSession , HittServletRrquest, HttpServletResponse
Decorator(装饰器模式) 说明
一句话总结 动态的给一个对象增加一些额外的功能
生活中的例子 U盘 Mp3
解决的问题 额外的增加功能过多
处理可撤销的职责
不能产生子类方式来增加功能
项目中是怎么用的 报表
模式结构 先定义一个顶级接口
再定义一个装饰器类,里面包含了被装饰对象的引用
在构造器里面传入被装饰对象,并且也要执行被装饰对象的方法
框架里面的使用 sitemesh 动态的的换皮肤框架
JDK里面的使用 java.io.InputStream,OutputStream,Reader and Writer的子类
------------------------------------------------------------------------------行为型-------------------------------------------------------------------------------------------
Strategy(策略模式) 说明
一句话总结 定义一些列的算法,可以互相替换
生活中的例子 买菜可以跑步去,可以走着去,可以骑车去
项目里面是怎么用的
解决了什么问题 做一件事可以有多种实现方法
模式结构 定义一个顶级接口,定义一个策略方法,让实例类类去实现这些这个接口
框架里面怎么用的 Hibernate主键生成策略
JDK 里面的使用 java.util.Comparator#compare()
doPost doGet
Template(模板模式) 说明
一句话总结 父类定义一系列的流程,子类去实现
生活中的例子 一件产品从配件到成品
解决了什么问题 业务有多种,但执行的流程就一套
模式结构 定义了个抽象类定义流程,子类继承后实现具体的细节方法
项目中是怎么用的 一般基类的实现都是模板模式
框架里的使用 Hibernate的方言,方言是跨数据库的基础
JDK里面的使用 Io流里面的InputStream Writer等等
java.util.AbstractList.java.util.AbstractSet and java.util.AbstractMap
Chain(责任链模式) 说明
一句话总结 一个请求用以链的方式把对象串联起来处理
生活中的例子 流水线,击鼓传花
解决什么问题 一个请求处理过程比较多,不确定那个对象最后处理这个请求
项目里怎么用
模式结构 定义一个抽象的Chain,里面有下一个的属性next,并且还有个设置函数
框架里面的使用 Struts2的拦截器
JDk里面使用 Filter 里面的doChain
Observer(观察者模式) 说明
一句话总结 对象之间一对多依赖关系,一变化了会通知多
生活中的例子 天气预报,红绿灯
解决了什么问题 多个对象依赖一个对象的情况
项目里面怎么用 结合具体项目,譬如物价变了要通知所有的客户端
模式结构 定义多方的观察者的接口,并定义方式
定义一方的Subject类
Subject类里面包含一个含有观察者的List
在Subject写一个通知方法,循环遍历所有list里面对象,并发送通知
框架里面的使用 Spring里面的事件,Tomcat里面的启动类,还有Hibernate里面的save,delete,update
JDK里面的使用 JDK本身就带了一个Observer接口,所有的事件监听都是观察者模式的实现
Command(命令模式) 说明
一句话总结 每个行为封装成一个对象,并且对外提供统一的方法调用
生活中的例子 遥控器
解决了什么问题 行为过多,或者行为比较复杂
项目里面怎么用的
模式结构 先定义一个Command顶级接口,并且声明方法
对应每个行为,用一个Command 的子类把它封装起来
在子类的统一方法实现功能
框架里面使用 Struts1,Struts2的核心就是命令模式,其实就是Action
JDK里面的使用 Runnable接口
|
|