guokehua(@yahoo.com.cn oy Java! 38设计模式(1) 1010 郭克华J2EE框架实战教学视频
oy Java! J guokehua@yahoo.com.cn 郭克华J2EE框架实战教学视频 38设计模式(1)
guokehua(@yahoo.com.cn 什么是模式 ‖模式提供了一个解决方案,它是一种设计 方法,而不是一种编程技术 ○降低耦合性 ○增加灵活性 Spring提供了降低耦合性的一种工具 设计模式提供了常见应用中降低耦合性的设计 思想 郭克华J2EE框架实战教学视频
J guokehua@yahoo.com.cn 郭克华J2EE框架实战教学视频 什么是模式 模式提供了一个解决方案,它是一种设计 方法,而不是一种编程技术 {降低耦合性 {增加灵活性 Spring提供了降低耦合性的一种工具 设计模式提供了常见应用中降低耦合性的设计 思想
guokehua(@yahoo.com.cn 设计模式:本课的目标 ●创建模式:创建对象 OFactory, Builder, Singleton ●结构模式:组合对象 O Adapter Decorator FLyweight, Proxy ●行为模式 O State. memento OBserver, Strategy, visitor 郭克华J2EE框架实战教学视频
J guokehua@yahoo.com.cn 郭克华J2EE框架实战教学视频 设计模式:本课的目标 z创建模式:创建对象 {Factory,Builder,Singleton… z结构模式:组合对象 {Adapter,Decorator… {Flyweight,Proxy… z行为模式 {State,Memento… {Observer,Strategy,Visitor…
guokehua(@yahoo.com.cn 工厂模式 场景:在 Action里面,我们要调用 CustomerDAo的 login方法,传统情况下你用什么代码? CustomerDAO cao= new CustomerDAOO dao login( ●考虑以下情况: O如果cdao在实例化的时候还要做一些准备工作? ○如果该 Action以后可能要切换到另一个 Studentdao,也调 用 login方法 ○如何让 Action的开发人员只需要懂得要实例化哪个对象, 而不需要知道怎样实例化? ●工厂模式可以解决这个问题 ●可以用 Spring来封装工厂类 郭克华J2EE框架实战教学视频
J guokehua@yahoo.com.cn 郭克华J2EE框架实战教学视频 工厂模式 z 场景:在Action里面,我们要调用CustomerDAO的 login方法,传统情况下你用什么代码? CustomerDAO cdao = new CustomerDAO(); cdao.login(); z 考虑以下情况: { 如果cdao在实例化的时候还要做一些准备工作? { 如果该Action以后可能要切换到另一个StudentDAO,也调 用login方法。 { 如何让Action的开发人员只需要懂得要实例化哪个对象, 而不需要知道怎样实例化? z 工厂模式可以解决这个问题 z 可以用Spring来封装工厂类
guokehua(@yahoo.com.cn 工厂模式要 ●用接口将需要实例化的类管理起来 ●开发工厂类,编写创建方法,传入参数 工厂类根据客户端传入参数决定实例化 哪个对象,返回 ●可以利用反射来降低耦合性 ●举例第一个 Spring框架的例子 郭克华J2EE框架实战教学视频
J guokehua@yahoo.com.cn 郭克华J2EE框架实战教学视频 工厂模式要点 z用接口将需要实例化的类管理起来 z开发工厂类,编写创建方法,传入参数, 工厂类根据客户端传入参数决定实例化 哪个对象,返回。 z可以利用反射来降低耦合性 z举例:第一个Spring框架的例子
guokehua(@yahoo.com.cn Factory-工厂模式小结 ●客户类和工厂类分开。消费者任何时候需 要某种产品,只需向工厂请求即可。消费 者无须修改就可以接纳新产品。 ●缺点是当产品修改时,工厂类也要做相应 的修改。怎样克服? Spring可以克服 ●工厂模式主要应用于模块间调用时模块可 调用接口较多的情况;实例化一个对象可 能要进行复杂操作的情况 ●练习:有一个复杂的 frame,个复杂的 Jframe,现在客户传入参数1,2来决定得到 frame还是 Jframe,要求客户不关心 Frame 和 Jframe的生成过程,怎么设计? 郭克华J2EE框架实战教学视频
J guokehua@yahoo.com.cn 郭克华J2EE框架实战教学视频 Factory -工厂模式小结 z 客户类和工厂类分开。消费者任何时候需 要某种产品,只需向工厂请求即可。消费 者无须修改就可以接纳新产品。 z 缺点是当产品修改时,工厂类也要做相应 的修改。怎样克服?Spring可以克服 z 工厂模式主要应用于模块间调用时模块可 调用接口较多的情况;实例化一个对象可 能要进行复杂操作的情况 z 练习:有一个复杂的Frame,一个复杂的 Jframe,现在客户传入参数1,2来决定得到 Frame还是Jframe,要求客户不关心Frame 和Jframe的生成过程,怎么设计?
guokehua(@yahoo.com.cn 建造模式 ●在 Windows里面打开计算器,如果要 你编写这个应用,你如何做? ●写一个类,在构造函数里面将各个控 件加上去? 目计算器 x 查看Q帮助 考虑如下问题 Backspace CE ●将数字键全部改颜色 ●将最左边四个键放在最右边 ●很明显,事情变得非常麻烦 郭克华J2EE框架实战教学视频
J guokehua@yahoo.com.cn 郭克华J2EE框架实战教学视频 建造模式 z在Windows里面打开计算器,如果要 你编写这个应用,你如何做? z写一个类,在构造函数里面将各个控 件加上去? z考虑如下问题 z将数字键全部改颜色 z将最左边四个键放在最右边 z很明显,事情变得非常麻烦
guokehua(@yahoo.com.cn 建造模式要点 ●编写类 Builder做实际的每个部分的建 造工作 ●编写 Director类对每个部分的建造工 作进行调用,其中的组装过程由它控 制 ●在某些情况下,可以用接口来管理 Builder 郭克华J2EE框架实战教学视频
J guokehua@yahoo.com.cn 郭克华J2EE框架实战教学视频 建造模式要点 z编写类Builder做实际的每个部分的建 造工作 z编写Director类对每个部分的建造工 作进行调用,其中的组装过程由它控 制 z在某些情况下,可以用接口来管理 Builder
guokehua(@yahoo.com.cn Builder模式小结 ●首先假设一个复杂对象是由多个部件 组成的,并且改变的机会较大 Builder模式是把复杂对象的创建和部 件的创建分别开来 ●练习: Frame上2个面板,第一个面板上 有一个按钮,第二个上有一个文本框 现在要将它们组合在一起放在 Frame 上,用建造模式实现并且总结有什么 好处? 郭克华J2EE框架实战教学视频
J guokehua@yahoo.com.cn 郭克华J2EE框架实战教学视频 Builder模式小结 z首先假设一个复杂对象是由多个部件 组成的,并且改变的机会较大, Builder模式是把复杂对象的创建和部 件的创建分别开来. z练习:Frame上2个面板,第一个面板上 有一个按钮,第二个上有一个文本框, 现在要将它们组合在一起放在Frame 上,用建造模式实现并且总结有什么 好处?
guokehua(@yahoo.com.cn 单例模式( Singleton) ●场景:在一个项目中,需要经常对文件系统进 行操作,如创建文件,拷贝文件等等,假如这 些功能用 FileOpen类封装,你如何调用这个类? FileOpe fo= new FileOpen fo createFile ●但是我们发现这个类作的工作与具体的业务逻 辑似乎关系不大他做的是一些共性的工作每 次调用时都实例化似乎太消耗内存。 ●怎样保证在调用的时候,系统中只有一个对象? 郭克华J2EE框架实战教学视频
J guokehua@yahoo.com.cn 郭克华J2EE框架实战教学视频 单例模式(Singleton) z 场景:在一个项目中,需要经常对文件系统进 行操作,如创建文件,拷贝文件等等,假如这 些功能用FileOpe类封装,你如何调用这个类? FileOpe fo = new FileOpe(); fo.createFile(); z 但是我们发现,这个类作的工作与具体的业务逻 辑似乎关系不大,他做的是一些共性的工作,每 次调用时都实例化,似乎太消耗内存。 z 怎样保证在调用的时候,系统中只有一个对象?