设计模式(PatternsinJava)--htp/www.jdon.com 设计模式( Patterns in Java) Java提供了丰富的API,同时又有强大的数据库系统作底层支持,那么我们的编程似乎 变成了类似积木的简单″拼凑"和调用,甚至有人提倡″蓝领程序员",这些都是对现代编 程技术的不了解所至 在真正可复用的面向对象编程中,GoF的《设计模式》为我们提供了一套可复用的面向对 象技术,再配合 Refactoring(重构方法),所以很少存在简单重复的工作,加上Java代码 的精炼性和面向对象纯洁性(设计模式是java的灵魂),编程工作将变成一个让你时刻体 验创造快感的激动人心的过程 为能和大家能共同探讨″设计模式",我将自己在学习中的心得写下来,只是想帮助更多 人更容易理解GoF的《设计模式》。由于原著都是以C++为例,以Java为例的设计模式 基本又都以图形应用为例,而我们更关心Java在中间件等服务器方面的应用,因此,本站 所有实例都是非图形应用,并且顺带剖析Jive论坛系统.同时为降低理解难度,尽量避 免使用UML图 如果你有一定的面向对象编程经验,你会发现其中某些设计模式你已经无意识的使用过 了;如果你是一个新手,那么从开始就培养自己良好的编程习惯(让你的的程序使用通用 的模式,便于他人理解;让你自己减少重复性的编程工作),这无疑是成为一个优秀程序 员的必备条件 整个设计模式贯穿一个原理:面对接口编程,而不是面对实现.目标原则是:降低耦合,增 强灵活性 前 □学习GoF设计模式的重要性 一建筑和软件中模式之异同 2:GoF设计模式 A创建模式 國设计模式之 Factory(工厂方法和抽象工厂) 使用工厂模式就象使用new一样频繁. 设计模式之 Prototype(原型 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的 对象
设计模式(Patterns in Java) -- http://www.jdon.com 1 设计模式(Patterns in Java) Java 提供了丰富的 API,同时又有强大的数据库系统作底层支持,那么我们的编程似乎 变成了类似积木的简单"拼凑"和调用,甚至有人提倡"蓝领程序员",这些都是对现代编 程技术的不了解所至. 在真正可复用的面向对象编程中,GoF 的《设计模式》为我们提供了一套可复用的面向对 象技术,再配合 Refactoring(重构方法),所以很少存在简单重复的工作,加上 Java 代码 的精炼性和面向对象纯洁性(设计模式是java 的灵魂),编程工作将变成一个让你时刻体 验创造快感的激动人心的过程. 为能和大家能共同探讨"设计模式",我将自己在学习中的心得写下来,只是想帮助更多 人更容易理解 GoF 的《设计模式》。由于原著都是以 C++为例, 以 Java 为例的设计模式 基本又都以图形应用为例,而我们更关心Java 在中间件等服务器方面的应用,因此,本站 所有实例都是非图形应用,并且顺带剖析 Jive 论坛系统.同时为降低理解难度,尽量避 免使用 UML 图. 如果你有一定的面向对象编程经验,你会发现其中某些设计模式你已经无意识的使用过 了;如果你是一个新手,那么从开始就培养自己良好的编程习惯(让你的的程序使用通用 的模式,便于他人理解;让你自己减少重复性的编程工作),这无疑是成为一个优秀程序 员的必备条件. 整个设计模式贯穿一个原理:面对接口编程,而不是面对实现.目标原则是:降低耦合,增 强灵活性. 1:前言 学习 GoF 设计模式的重要性 建筑和软件中模式之异同 2:GoF 设计模式 A.创建模式 设计模式之 Factory(工厂方法和抽象工厂) 使用工厂模式就象使用 new 一样频繁. 设计模式之 Prototype(原型) 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的 对象
设计模式(PatternsinJava)--htp/www.jdon.com 回设计模式之 Builder 汽车由车轮方向盘发动机很多部件组成,同时,将这些部件组装 成汽车也是一件复杂的工作, Builder模式就是将这两种情况分开 进行 回设计模式之 Singleton(单态) 保证一个类只有一个实例,并提供一个访问它的全局访问点 B结构模式 國设计模式之 Facade 可扩展的使用JDBC针对不同的数据库编程, Facade提供了一种灵 活的实现 设计模式之Prox 以Jive为例,剖析代理模式在用户级别授权机制上的应用 设计模式之 Adapter 使用类再生的两个方式:组合(new)和继承( extends),这个已经在 " thinking in java"中提到过 回设计模式之 Composite 就是将类用树形结构组合成一个单位你向别人介绍你是某单位, 你是单位中的一个元素,别人和你做买卖,相当于和单位做买卖。 文章中还对Jve再进行了剖析, 设计模式之Dec Decorator是个油漆工给你的东东的外表刷上美丽的颜色 回设计模式之 bridge 将"牛郎织女"分开(本应在一起分开他们形成两个接口)在他们之 间搭建一个桥(动态的结合) 國设计模式之 Flyweight 提供Java运行性能降低小而大量重复的类的开销 C.行为模式 四设计模式之 Template 实际上向你介绍了为什么要使用Java抽象类,该模式原理简单,使 用很普遍 四设计模式之 Memento 很简单一个模式就是在内存中保留原来数据的拷贝 回设计模式之 Observer 介绍如何使用 Java apl提供的现成 Observer
设计模式(Patterns in Java) -- http://www.jdon.com 2 设计模式之 Builder 汽车由车轮 方向盘 发动机很多部件组成,同时,将这些部件组装 成汽车也是一件复杂的工作,Builder 模式就是将这两种情况分开 进行。 设计模式之 Singleton(单态) 保证一个类只有一个实例,并提供一个访问它的全局访问点 B.结构模式 设计模式之 Facade 可扩展的使用 JDBC 针对不同的数据库编程,Facade 提供了一种灵 活的实现. 设计模式之 Proxy 以 Jive 为例,剖析代理模式在用户级别授权机制上的应用 设计模式之 Adapter 使用类再生的两个方式:组合(new)和继承(extends),这个已经在 "thinking in java"中提到过. 设计模式之 Composite 就是将类用树形结构组合成一个单位.你向别人介绍你是某单位, 你是单位中的一个元素,别人和你做买卖,相当于和单位做买卖。 文章中还对 Jive 再进行了剖析。 设计模式之 Decorator Decorator 是个油漆工,给你的东东的外表刷上美丽的颜色. 设计模式之 Bridge 将"牛郎织女"分开(本应在一起,分开他们,形成两个接口),在他们之 间搭建一个桥(动态的结合) 设计模式之 Flyweight 提供 Java 运行性能,降低小而大量重复的类的开销. C.行为模式 设计模式之 Template 实际上向你介绍了为什么要使用 Java 抽象类,该模式原理简单,使 用很普遍. 设计模式之 Memento 很简单一个模式,就是在内存中保留原来数据的拷贝. 设计模式之 Observer 介绍如何使用 Java API 提供的现成 Observer
设计模式(PatternsinJava)-htp/vww.jdon.com 四设计模式之 Chain of Responsibility 各司其职的类串成一串,好象击鼓传花当然如果自己能完成,就不 要推委给下一个 四设计模式之 Command 什么是将行为封装 Command是最好的说明 四设计模式之Ste 状态是编程中经常碰到的实例将状态对象化设立状态变换器,便 可在状态中轻松切换 四设计模式之 Strategy 不同算法各自封裝用户端可随意挑选需要的算法 四设计模式之 Mediator Mediator很象十字路口的红绿灯每个车辆只需和红绿灯交互就可 以 四设计模式之 Interpreter 主要用来对语言的分析应用机会不多 设计模式之 Visitor 访问者在进行访问时完成一系列实质性操作而且还可以扩展 回设计模式之 Iterator 这个模式已经被整合入Java的 Collection在大多数场合下无需自 己制造一个 Iterator,只要将对象装入 Collection中,直接使用 Iterator 进行对象遍历。 3英文资料 hinking in Patterns with Java Thinking in Java的作者 Eckel又 著作! DCMSC491D Design Patterns In a verview of Design Patterns精确定义各个模式以及他们的关系 GDesign Patterns Java Companion 咂设计模式(英文)从设计模式去理解EJB或J2EE我认为是个非常有效 的办法
设计模式(Patterns in Java) -- http://www.jdon.com 3 设计模式之 Chain of Responsibility 各司其职的类串成一串,好象击鼓传花,当然如果自己能完成,就不 要推委给下一个. 设计模式之 Command 什么是将行为封装,Command 是最好的说明. 设计模式之 State 状态是编程中经常碰到的实例,将状态对象化,设立状态变换器,便 可在状态中轻松切换. 设计模式之 Strategy 不同算法各自封装,用户端可随意挑选需要的算法. 设计模式之 Mediator Mediator 很象十字路口的红绿灯,每个车辆只需和红绿灯交互就可 以. 设计模式之 Interpreter 主要用来对语言的分析,应用机会不多. 设计模式之 Visitor 访问者在进行访问时,完成一系列实质性操作,而且还可以扩展. 设计模式之 Iterator 这个模式已经被整合入 Java 的 Collection.在大多数场合下无需自 己制造一个Iterator,只要将对象装入Collection中,直接使用Iterator 进行对象遍历。 3:英文资料 Thinking in Patterns with Java Thinking in Java 的作者 Eckel 又一 著作! CMSC491D Design Patterns In Java Overview of Design Patterns 精确定义各个模式以及他们的关系 Design Patterns Java Companion EJB 设计模式(英文) 从设计模式去理解EJB或J2EE我认为是个非常有效 的办法
设计模式(PatternsinJava)--htp/www.jdon.com 学习GoF设计模式的重要性 GoF的《设计模式》也许你没有听说过,但是《 Thingking in java》(Java编程思想)你应该 知道甚至读过吧! 在浏览《 Thingking in Java》(第一版)时,你是不是觉得好象这还是一本Java基础语言书 籍?但又不纯粹是,因为这本书的作者将面向对象的思想巧妙的融合在Java的具体技术上, 潜移默化的让你感觉到了一种新的语言和新的思想方式的诞生 但是读完这本书,你对书中这些蕴含的思想也许需要一种更明晰更系统更透彻的了解和掌 握,那么你就需要研读GoF的《设计模式》了。 《 Thingking in Java》(第一版中文)是这样描述设计模式的:他在由 Gamma,Helm和 Johnson Vlissides简称 Gang of Four(四人帮),缩写GoF编著的《 Design Patterns》一书中被定义 成一个“里程碑”。事实上,那本书现在已成为几乎所有0OP(面向对象程序设计)程序员都 必备的参考书。(在国外是如此) GoF的《设计模式》是所有面向对象语言(C++ Java C#)的基础,只不过不同的语言将之实 现得更方便地使用 GOF的设计模式是一座”桥 就Java语言体系来说,GOF的设计模式是Java基础知识和J2EE框架知识之间一座隐性的 会Java的人越来越多,但是一直徘徊在语言层次的程序员不在少数,真正掌握Java中接口 或抽象类的应用不是很多,大家经常以那些技术只适合大型项目为由,避开或忽略它们,实 际中,Java的接口或抽象类是真正体现Java思想的核心所在,这些你都将在GoF的设计模 式里领略到它们变幻无穷的魔力 GoF的设计模式表面上好象也是一种具体的"技术",而且新的设计模式不断在出现,设计模 式自有其自己的发展轨道,而这些好象和J2EE.Net等技术也无关! 实际上,GoF的设计模式并不是一种具体"技术”,它讲述的是思想,它不仅仅展示了接口或 抽象类在实际案例中的灵活应用和智慧,让你能够真正掌握接口或抽象类的应用,从而在原 来的Java语言基础上跃进一步,更重要的是,GoF的设计模式反复向你强调一个宗旨:要 让你的程序尽可能的可重用 这其实在向一个极限挑战:软件需求变幻无穷,计划没有变化快,但是我们还是要寻找出不 变的东西,并将它和变化的东西分离开来,这需要非常的智慧和经验。 而GoF的设计模式是在这方面开始探索的一块里程碑
设计模式(Patterns in Java) -- http://www.jdon.com 4 学习 GoF 设计模式的重要性 GoF 的《设计模式》也许你没有听说过,但是《Thingking in Java》(Java 编程思想)你应该 知道甚至读过吧! 在浏览《Thingking in Java》(第一版)时,你是不是觉得好象这还是一本 Java 基础语言书 籍?但又不纯粹是,因为这本书的作者将面向对象的思想巧妙的融合在 Java 的具体技术上, 潜移默化的让你感觉到了一种新的语言和新的思想方式的诞生。 但是读完这本书,你对书中这些蕴含的思想也许需要一种更明晰更系统更透彻的了解和掌 握,那么你就需要研读 GoF 的《设计模式》了。 《Thingking in Java》(第一版中文)是这样描述设计模式的:他在由 Gamma, Helm 和 Johnson Vlissides 简称 Gang of Four(四人帮),缩写 GoF 编著的《Design Patterns》一书中被定义 成一个“里程碑”。事实上,那本书现在已成为几乎所有 OOP(面向对象程序设计)程序员都 必备的参考书。(在国外是如此)。 GoF 的《设计模式》是所有面向对象语言(C++ Java C#)的基础,只不过不同的语言将之实 现得更方便地使用。 GOF 的设计模式是一座"桥" 就 Java 语言体系来说,GOF 的设计模式是 Java 基础知识和 J2EE 框架知识之间一座隐性的" 桥"。 会 Java 的人越来越多,但是一直徘徊在语言层次的程序员不在少数,真正掌握 Java 中接口 或抽象类的应用不是很多,大家经常以那些技术只适合大型项目为由,避开或忽略它们,实 际中,Java 的接口或抽象类是真正体现 Java 思想的核心所在,这些你都将在 GoF 的设计模 式里领略到它们变幻无穷的魔力。 GoF 的设计模式表面上好象也是一种具体的"技术",而且新的设计模式不断在出现,设计模 式自有其自己的发展轨道,而这些好象和 J2EE .Net 等技术也无关! 实际上,GoF 的设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或 抽象类在实际案例中的灵活应用和智慧,让你能够真正掌握接口或抽象类的应用,从而在原 来的 Java 语言基础上跃进一步,更重要的是,GoF 的设计模式反复向你强调一个宗旨:要 让你的程序尽可能的可重用。 这其实在向一个极限挑战:软件需求变幻无穷,计划没有变化快,但是我们还是要寻找出不 变的东西,并将它和变化的东西分离开来,这需要非常的智慧和经验。 而 GoF 的设计模式是在这方面开始探索的一块里程碑
设计模式(PatternsinJava)--htp/www.jdon.com J2E等属于一种框架软件,什么是框架软件?它不同于我们以前接触的 Java API等,那些 属于 Toolkit(工具箱),它不再被动的被使用,被调用,而是深刻的介入到一个领域中去, J2EE等框架软件设计的目的是将一个领域中不变的东西先定义好,比如整体结构和一些主 要职责(如数据库操作事务跟踪安全等),剩余的就是变化的东西,针对这个领域中具体应 用产生的具体不同的变化需求,而这些变化东西就是J2EE程序员所要做的 由此可见,设计模式和J2EE在思想和动机上是一脉相承,只不过 1.设计模式更抽象,J2EE是具体的产品代码,我们可以接触到,而设计模式在对每个应用 时才会产生具体代码。 2.设计模式是比J2EE等框架软件更小的体系结构,J2EE中许多具体程序都是应用设计模式 来完成的,当你深入到J2EE的内部代码研究时,这点尤其明显,因此,如果你不具备设计 模式的基础知识(GoF的设计模式),你很难快速的理解J2EE。不能理解J2E,如何能灵活应 用 3.J2EE只是适合企业计算应用的框架软件,但是GoF的设计模式几乎可以用于任何应用! 因此GoF的设计模式应该是J2EE的重要理论基础之一。 所以说,⑥oF的设计模式是Java基础知识和J2EE框架知识之间一座隐性的"桥"。为什么说 隐性的? GOF的设计模式是一座隐性的"桥 因为很多人没有注意到这点,学完Java基础语言就直接去学J2EE,有的甚至鸭子赶架,直 接使用起 Weblogic等具体J2EE软件,一段时间下来,发现不过如此,挺简单好用,但是你 真正理解J2EE了吗?你在具体案例中的应用是否也是在延伸J2EE的思想? 如果你不能很好的延伸J2EE的思想,那你岂非是大炮轰蚊子,认识到J2EE不是适合所有场 合的人至少是明智的,但我们更需要将J2EE用对地方,那么只有理解J2EE此类框架软件的 精髓,那么你才能真正灵活应用Java解决你的问题,甚至构架出你自己企业的框架来。(我 们不能总是使用别人设定好的框架,为什么不能有我们自己的框架?) 因此,首先你必须掌握GoF的设计模式。虽然它是隐性,但不是可以越过的。 在著名的EJB领域顶尖的专家 Richard monson- Haefel的个人网站:ww, EJBNoW,com中 Richard极力推荐的几本书中就有GoF的《设计模式》,原文如下 Design Patterns Most developers claim to experience an epiphany reading this book. If you ve never read the Design Patterns book then you have suffered a very serious gap in your programming education that should be remedied immediately. 翻译:很多程序员在读完这本书,宣布自己相当于经历了一次"主显节"(纪念那稣降生和受 洗的双重节日),如果你从来没有读过这本书,你会在你的程序教育生涯里存在一个严重裂沟, 所以你应该立即挽救弥补!
设计模式(Patterns in Java) -- http://www.jdon.com 5 J2EE 等属于一种框架软件,什么是框架软件?它不同于我们以前接触的 Java API 等,那些 属于 Toolkist(工具箱),它不再被动的被使用,被调用,而是深刻的介入到一个领域中去, J2EE 等框架软件设计的目的是将一个领域中不变的东西先定义好,比如整体结构和一些主 要职责(如数据库操作 事务跟踪 安全等),剩余的就是变化的东西,针对这个领域中具体应 用产生的具体不同的变化需求,而这些变化东西就是 J2EE 程序员所要做的。 由此可见,设计模式和 J2EE 在思想和动机上是一脉相承,只不过 1.设计模式更抽象,J2EE 是具体的产品代码,我们可以接触到,而设计模式在对每个应用 时才会产生具体代码。 2.设计模式是比 J2EE 等框架软件更小的体系结构,J2EE 中许多具体程序都是应用设计模式 来完成的,当你深入到 J2EE 的内部代码研究时,这点尤其明显,因此,如果你不具备设计 模式的基础知识(GoF 的设计模式),你很难快速的理解 J2EE。不能理解 J2EE,如何能灵活应 用? 3.J2EE 只是适合企业计算应用的框架软件,但是 GoF 的设计模式几乎可以用于任何应用! 因此 GoF 的设计模式应该是 J2EE 的重要理论基础之一。 所以说,GoF 的设计模式是 Java 基础知识和 J2EE 框架知识之间一座隐性的"桥"。为什么说 隐性的? GOF 的设计模式是一座隐性的"桥" 因为很多人没有注意到这点,学完 Java 基础语言就直接去学 J2EE,有的甚至鸭子赶架,直 接使用起 Weblogic 等具体 J2EE 软件,一段时间下来,发现不过如此,挺简单好用,但是你 真正理解 J2EE 了吗?你在具体案例中的应用是否也是在延伸 J2EE 的思想? 如果你不能很好的延伸 J2EE 的思想,那你岂非是大炮轰蚊子,认识到 J2EE 不是适合所有场 合的人至少是明智的,但我们更需要将 J2EE 用对地方,那么只有理解 J2EE 此类框架软件的 精髓,那么你才能真正灵活应用 Java 解决你的问题,甚至构架出你自己企业的框架来。(我 们不能总是使用别人设定好的框架,为什么不能有我们自己的框架?) 因此,首先你必须掌握 GoF 的设计模式。虽然它是隐性,但不是可以越过的。 在著名的 EJB 领域顶尖的专家 Richard Monson-Haefel 的个人网站:www.EJBNow.com 中 Richard 极力推荐的几本书中就有 GoF 的《设计模式》,原文如下: Design Patterns Most developers claim to experience an epiphany reading this book. If you've never read the Design Patterns book then you have suffered a very serious gap in your programming education that should be remedied immediately. 翻译: 很多程序员在读完这本书,宣布自己相当于经历了一次"主显节"(纪念那稣降生和受 洗的双重节日),如果你从来没有读过这本书,你会在你的程序教育生涯里存在一个严重裂沟, 所以你应该立即挽救弥补!