动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.深入探讨SQL Server 2000对XML的.
.J2ME游戏开发中时钟的简单实现.
.Java实现SOA的标准途径.
.Java+XML+MVC 框架StrutsCX.
.使用MMAPI播放gif动画.
.探索J2ME:用GCF通信.
.JAVA初学者的6个问题.
.慎防恶意的Java Applet.
.SUN正式发布Java API文档中文版.
.Java性能设计.
.Java1.5语言新特性简单总结.
.产生正确的行为.
.专稿:实战EJB之三 开发会话Bean.
.垃圾自动收集系统指导(1).
.java以及其相关性应用.
.通过Push信息来自动启动JAVA移动.
.Java与XML联合编程.
.在Java应用软件中加入logging.
.FCKeditor在线编辑器的使用.
.Spring WebFlow :重用与抽象框架.

Java设计模式和软件工程之DesignPattern介绍

发表日期:2008-1-5 |



  什么是Design Pattern...
  
  在OO Design中,reueable 是一个非常重要的组成部分。也就是说如何让你的code能被其他的程序利用是design的要害部分!
  
  让code reuseable有多种办法,除了oo language本身的hirechay等特性外,把现实中的问题记录下来,然后发表,可防止重复的开发过程。
  
  Design Pattern就是一些已被记录的方法,并且有系统的描述。
  
  根据 Christopher Alexander “每个pattern描述了在特定环境下发生了很多次的问题,然后你便可以描述这些问题的共性并提供解决的办法”
  
  这就好象砖头一定是方的,这样他便能很轻易地和其他砖头一起被砌成房子。
  
  Java在resuseable方面有突出的表现,如interface的引入,使很多在c++中暧昧的继续关系得到有效的解决。应该来说,java语言的本身拥有很多OO的嫡系血统,整合了现代的编程方法。当然我们都了解有关
  implementation的缺陷使得它的应用受到很大限制。但从design的角度说,它的确是一种非凡的东西。这也是为什么我想用它来解释pattern的原因。
  
  实例1:在sun java的native lib中,我们随处可见design pattern的身影。比如在新的event model中,Listener 便是一种叫Observer的pattern(MFC 中的notification 也是出于其中)
  
  实例2:JFC UI种的plugable Look & Feel 结合了Abstract Factory 和Bridge Pattern。前者能产生一组widget factory,而后者则提供了建立
  
  在一致interface上具体的实现方法。
  
  当然在实际的开发中你可能碰到各种问题,假如你能把它们系统地记录下来并提供实际的解决办法,这就可能是一种新的pattern。但记住pattern是能解决一类问题的方法,而不是一个问题。所以对一类问题的共性归类很重要。在以后我们会介绍如何来做这方面的工作。
  
  后:
  
  1.小弟的中文水平差的可以,那位仁兄能帮忙指正的话,在下感激不尽。
  
  2.做比说重要。
  
  3.多谢compiler的鼓励,希望能共同努力,把这一系列写完
  
  4.这里到底是不是java group? 怎么尽是些不着边际的post.
  上一次我们主要介绍了什么是Design Pattern,作为一部分的补充,这次想讨论一下记录Design Pattern的格式和方法。
  
  虽然Design Pattern源自于Object Oriented Design的方法,但它又是完全基于实践的。因此选择何种语言及上下文的关系对与读者至关重要。
  
  基本上每种Pattern都会有相应的UML(1)和Interactive Diagram(2),同时配以简洁的示范代码来表达作者在当时的想法。
  
  可以想象一种Pattern的应用面决定不止以某种特定的场景。打个比方,Composite Pattern这种建立于包含关系的object strUCture可以表达很多类事物,如桌面应用文件的结构,网络中分布对象的集合等等,它并没有局限于某类应用。
  
  而基于不同的实现语言,Pattern的实现也会很不一样。我们以后会提到的Singleton在C++中的实现和Java中的实现有很大的区别。
  
  大致上每种Pattern都包含了一下几个部分。
  
  Pattern Name: 名字
  
  Problem: 讲述Pattern的来源及上下文关系。问题的种类可有很多种,有时我们可能想用objects来表达某种算法,而有时确是为了如何表达objects之间的结构。而且在一些情况下我们还要告诉读者在碰到这个问题前,我们已经用何种方法解决了前因。
  
  The Solution:解决之道。包括用哪些元素来做Design,Element之间的关系,结构,调用的顺序,变种等等。为了清析的表达一个Design,往往辅助以UML,Interactive Diagram,Code Sample等。因为Pattern 就象一种
  
  Tempelate,可以应用于不同的场合,所以Solution不应该是描述一中特定的设计。
  
  The Consequence:结果。这是最轻易被人忽视的一点。因为Design的需要Pattern并不往往是最有效率的方案,在一些情况下,我们牺牲很有效率的方案仅仅是为了让别人能看懂我们的程序。(个人认为这很重要)所以我们一定要注明在那些地方我们做了妥协。并尽可能地预计所会产生的正面及负面效果。
  
  注:
  
  UML:Unified Modeling Language是解释Objects静态关系的一种图表
  
  Interactive Diagram:描述objects之间的动态关系
  看着自己以前写几篇的Design Pattern文章,越看越喜欢.
  
  算了, 不管有没有人看,写下去再说!
  
  上几次主要介绍了Design Pattern的基本概念,和文档的
  
  格式. Design Pattern在现实的世界中共有23种标准的
  
  pattern. 最早出现在由Erich Gamma, Richard Helm,
  
  Ralph Johnson和John Vlissides编写的"Design Patterns"
  
  一书. 由于此书一成为OO Design的标准参考书之一, 所以许多专家建议在实际开发中,Developers 应该用标准的pattern来相互交流, 以便于了解彼此的设计思想. Java的标准库便运用此原则, 对于标准Pattern的扩展, 大多也有明确的出处(如Listener便源自于Observer).
  
  按照不同的应用原则, 标准Pattern 分为三个类别
  
  1. "Creational Patterns" 主要用于创建Objects, 典型
  
  有Factory Pattern.
  
  2. "Structural Patterns" 用于组织不同的objects并整合成复杂结构, 如 Adapter, Bridge 等
  
  3. "Behavioral Patterns" 主要描述了object和class间交互的方法, 它可以把一个十分复杂控制流分解成不同的部分,并交由不同的object处理. 如 Observer, Command等
  
  下面我将标准的Pattern列出:
  
  ==============
  
  Creational Patterns
  
  ==============
  
  * Abstract Factory
  
  * Builder
  
  * Factory Method
  
  * Prototype
  
  * Singleton
  
  ==============
  
  Structural Patterns
  
  ==============
  
  * Adapter
  
  * Bridge
  
  * Composite
  
  * Decorator
  
  * Facade
  
  * Flyweight
  
  * Proxy
  
  ==============
  
  Behavioral Patterns
  
  ==============
  
  * Chain Of Responsibility
  
  * Command
  
  * Interpreter
  
  * Iterator
  
  * Mediator
  
  * Memento
  
  * Observer
  
  * State
  
  * Strategy
  
  * Template Method
  
  * Visitor
  现在开始, 我将有选择地介绍不同的Patterns
  
  名字:
  
  ====
  
  1. Factory Method, (可能是最常用的了. )
  
  问题:
  
  ====
  
  在一个Class继续关系中, 在最顶层的抽象类定义了一组objects
  
  的关系. 每个object很可能属于另一个抽象的继续关系.而你
  
  得Classes 处于整个关系的中间层次, 你需要不同的Class包含不同产品.
  
  解决方法:
  
  =======
  
  参考一个简单的实列: 在一个Model View Control的结构中,
  
  抽象的Controller需要有 Model 和 View的 Interface.
  
  Controller的子类则需要具体的 model 和 view. 这时我们就可
  
  以在 AbstractController中定义
  
  Class AbstractController {
  
  abstract protected Model createModel ();
  
  abstract protected View createView();
  
  }
  
  每个controller的子类只需要overiden这两个method, 就可以获得
  
  一个适合它的Model和View. 如在ConcreteController中
  
  Class ConcreteController {
  
  protected Model createModel(){
  
  return new ConcreteModel(this);
  
  }
  
  protected View createView(){
  
  return new ConcreteView(this);
  
  }
  
  }
  
  这两个method就叫 "Factory Method"
  
  其它扩展:
  
  ========
  
  在MVC的列子中, factory method应用于hireachy中, 我们还可以在一个单一的class中根据不同的要求创建不同的产品. 设想有一中Java的component可以象 Xwindow 一样, 程序的 presentation 可以在本地的host上,也可以在remote host上. 这就需要有两种Graphics来帮助component的 rendering. 一种是LocalGraphics, 一种是RemoteGraphics. 它们都是
  
  java.awt.Graphic的子类. 那么我们的这种非凡的component就需要overiden
  Component中getGraphics()这个method.
  
  Class DistComponent extends Component
  
  {
  
  .......
  
  protected Graphics getGraphics() {
  
  if ( isRenderingRemote())
  
  return new RemoteGraphics();
  
  else
  
  return new LocalGraphics();
  
  }
  
  ......
  
  }
  
  在此getGraphics就是Factory Method;
上一篇:谈谈设计模式中的Iterator迭代器 人气:871
下一篇:在Java中应用State设计模式 人气:678
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-10 企业网站智能管理系统(TZIMS) v6
2008-10-10 拓文asp.net网站内容管理系统 v6
2008-10-10 动网论坛PHP版 v2.0++ Build 081
2008-10-10 免费时代CMS v5.0
2008-10-10 wodig第四季中文DIGG社区 v4.1 b
2008-10-10 老Y文章管理系统 v2.2 bulid 081
2008-10-10 魔法盒动感相册 ASP+SQL版 v2.0
2008-10-10 Asoft签到管理系统 v3.0 Pack1
2008-10-10 哥特人音乐网潮流留言本 v1.1
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成