小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

在Eclipse中安裝jbosside建立servlet-

 昵稱17030 2007-01-08
·在Eclipse中安裝jbosside建立servlet-
  
1、jboss-ide的安裝。
   jboss-ide是通過software update安裝的。
   從help-software update-update manager打開update manager,
   建立新的site bookmark,命名為jbosside,地址:http://jboss./jbosside/updates.
   選擇建立的jbosside下的jboss-ide1.0/Eclipse2.1,選擇最新的版本安裝。
2、增加快捷按鈕到TOP Menu中
   jboss-ide插件提供了一組按鈕,用來啟動、停止、終止server,和查看server console和logfiles。這些
   按鈕只能操作默認的server而且只能操作一個,顯示這些按鈕,如下:
   1、右鍵在top menu上單擊。
   2、選擇customize persective。
   3、展開other。
   4、選擇default server。
   5、點擊ok。
3、配置和開始一個server。
    需要獨立的安裝jboss。
    在run-debug中選擇機器安裝的jboss的版本,點擊new,建立一個jboss的配置實例,設(shè)定配置的名稱
    和jboss server的主目錄,點擊close,然后到window-》preferences-》jboss_ide-》launcher,
    指定一個default server。現(xiàn)在可以使用前面增加到top menu中的按鈕了。
4、建立一個servlet.
   現(xiàn)在來學(xué)習(xí)如何使用這個JBOSS_IDE插件,我們將建立一個簡單的“hello world”servlet并且發(fā)布到j(luò)boss上。
   把你的源代碼放在一個源代碼目錄中,把編譯結(jié)果放在一個輸出目錄中。下面的步驟將配置源代碼目錄和輸出目錄。
 1、在Package Explorer中右鍵單擊你的項目。
 2、到Properities ->Java build path.
 3、點擊source tab.
 4、click on ADD Folder。
 5、click on create new folder.
 6、set the folder name to "src".
 7、選擇“yes”當(dāng)詢問你刪除項目的原目錄并且建立“bin”目錄時。
下邊需要設(shè)定你的CLASSPATH,通過設(shè)定the libraties(JAR files),Eclipse將用它來編譯你的代碼。你也需要增加
JAR file ,允許你編譯servlet的jar 文件。在Eclipse的tomcat插件中包含需要的servlet。
 1、click on the libraries tab(while under the properities->java build path)
 2、click add variable.
 3\ select Eclipse_home and click extend.
 4\ Navigate to the plugin/org.eclipse.tomcat.4.1 directory.
 5\ select the servlet.jar and click OK.
 6\ click Ok to exit the properities dialog.
現(xiàn)在建立一個名為HelloWorldServlet的類,在包com.jiawh.test中。
代碼如下:
/*
 * Created on 2004-5-21
 *
 * To change the template for this generated file go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
package com.jiawh.test.jboss;
import java.io.IOException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author Administrator
 *
 * To change the template for this generated type comment go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
public class HelloWorldServlet extends HttpServlet {
 protected void service(HttpServletRequest request, HttpServletResponse response) throws IOException{
  ServletOutputStream out = response.getOutputStream();
  out.println("<html><body><h1>Hello World!</h1></body></html>");
 }
}

現(xiàn)在需要建立一個發(fā)布描述文件,這樣jboss就知道如何使用你的servlet了。
發(fā)布描述文件(web.xml)被放在WEB-INF目錄中,都在一個war文件中。在原代碼目錄下建立目錄WEB-INF,然后建立一個文件
web.xml在這個目錄下,文件的內(nèi)容如下:
<!DOCTYPE web-app PUBLIC
  ‘-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN‘
 ‘http://java./j2ee/dtds/web-app_2.2.dtd‘>
<web-app>
  <servlet>
  <servlet-name>HelloWorldServlet</servlet-name>
  <servlet-class>com.jiawh.test.jboss.HelloWorldServlet</servlet-class>
 </servlet>
  <servlet-mapping>
  <servlet-name>HelloWorldServlet</servlet-name>
  <url-pattern>/Hello</url-pattern>
 </servlet-mapping>
</web-app>

5、定義war文件結(jié)構(gòu)。
在你發(fā)布你的應(yīng)用到j(luò)boss之前,你需要定義的的war文件的結(jié)構(gòu),通過Packaging configuration可以定義war文件結(jié)構(gòu),
然后你就可以建立war文件了:
 1、在Packager Explorer中右鍵點擊你的項目。
 2、選擇Properties->Packaging configuration。
 3、Right click in the right frame and click Add Std. Archive.
 4、Select Standard-WAR.war and click OK.
 5、Right click on the configuration and click Edit.
 6、重新命名為 helloworld.war.
 7、Expand the configuration(擴展配置).
 8、在Manifest.MF這行上右鍵點擊,并且刪除它.
點擊OK,你將在你的項目中看到一個文件(packaging-build.xml)。
6、建立并且部署這個war文件。
通過在你的項目上右鍵點擊run packaging建立war文件。然后你需要點擊Refresh就可以看到這個war文件了。
這個文件應(yīng)該在你項目的頂層目錄中。
在這個war文件上點擊右鍵,選擇Deployment-Deploy to,來發(fā)布這個文件。
會出現(xiàn)一個Target choice對話框,讓你選擇要發(fā)布到的應(yīng)用服務(wù)器上,選擇后會有個提示發(fā)布成功的確認框。
 
記得要啟動server哦。
發(fā)布成功,可以去看了。。。http://localhost:8080/helloworld/hello
- 作者: moses  2004年05月21日,星期五 20:58:13   回復(fù)(0 ) | 引用(0 ) | URL
·線程同步-
  
       使用synchronized修飾一個方法,可以保證當(dāng)一個線程在一個同步方法內(nèi)部,所有試圖調(diào)用該方法的同實例的其他線程必須等待。注意是同實例的同步方法。也即,一旦線程進入實例的同步方法,沒有其他線程可以進入相同實例的的同步方法。但是該實例的其他不同步方法可以使用。
public class CallMe {
 synchronized void call(String msg){
  System.out.print("[" + msg);
  try{
   Thread.sleep(1000);
  }catch(InterruptedException e){
   System.out.println("Interrupted");
  }
  System.out.print("]");
 }
}
        可以保證相同實例對同步方法的調(diào)用的線程限制。
 
        synchronized塊確保對object成員方法的調(diào)用僅在當(dāng)前線程成功進入object管程后發(fā)生。每一個對象都有與之對應(yīng)的隱式管程。進入某一個對象的管程,就是調(diào)用被synchronized關(guān)鍵字修飾的方法。
 
public void run() {
  // TODO Auto-generated method stub
  synchronized(targer){
   targer.call(msg);
  }
 }
 
- 作者: moses  2004年05月8日,星期六 16:14:32   回復(fù)(0 ) | 引用(0 ) | URL
·多線程處理中的優(yōu)先級-
  
線程處理類
/*
 * Created on 2004-5-8
 *
 * To change the template for this generated file go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
package com.jiawh.test.threadPriority;
/**
 * @author Administrator
 *
 * To change the template for this generated type comment go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
public class Clicker implements Runnable {
 int click = 0;
 Thread t;
 private volatile boolean runing = true;
 
 public Clicker(int p){
  t = new Thread(this);
  t.setPriority(p);
 }
 
 /* (non-Javadoc)
  * @see java.lang.Runnable#run()
  */
 public void run() {
  while(runing){
   click++;
  }
 }
 
 public void stop(){
  runing = false;
 }
 
 public void start(){
  runing = true;
  t.start();
 }
}
主線程類
/*
 * Created on 2004-5-8
 *
 * To change the template for this generated file go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
package com.jiawh.test.threadPriority;
/**
 * @author Administrator
 *
 * To change the template for this generated type comment go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
public class Hilo {
 public static void main(String[] args) {
  Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
  Clicker c1 = new Clicker(Thread.NORM_PRIORITY + 2);
  Clicker c2 = new Clicker(Thread.NORM_PRIORITY - 2);
  
  c2.start();
  c1.start();
  
  try{
   Thread.sleep(10000);
  }catch(InterruptedException e){
   System.out.println("Main thread Interrupted.");
  }
  
  c1.stop();
  c2.stop();
  try{
   c1.t.join();
   c2.t.join();
  }catch(InterruptedException e){
   System.out.println("InterruptedException caught");
  }
  System.out.println("low priority clicker: " + c2.click);
  System.out.println("hight priority clicker: " + c1.click);
 }
}
優(yōu)先級(priority)的高低影響實際的運行情況,當(dāng)然程序同樣受到操作系統(tǒng)的影響,操作系統(tǒng)必須是有優(yōu)先級劃分的。
注意線程處理類中的volatile關(guān)鍵字,它確保在下邊的循環(huán)中每次得到驗證;
while(runing){
   click++;
  }
 
設(shè)置主線程的優(yōu)先級為最大優(yōu)先級,確保主線程能夠搶奪回操作權(quán)限,能夠進行下邊的處理。
- 作者: moses  2004年05月8日,星期六 11:19:41   回復(fù)(0 ) | 引用(0 ) | URL
·RequisitePro和Rose和Word結(jié)合使用-
  
在RequisitePro中建立項目,定義項目的需求類型。比如:詞匯表、用例、涉眾請求、軟件需求等。
另外可以定位項目的文檔類型,可以建立相應(yīng)的需求的文檔類型。定義文檔類型時可以設(shè)置關(guān)聯(lián)的需
求類型。另外可以給定義的文檔類型選擇文檔類型的模板。
  文檔類型的模板的可選列表是在RequisitePro安裝目錄下的outlines目錄下,一個可選項由兩個
 文件構(gòu)成,一個文件是模板本身,令一個是前綴同名的def文件,此文件共有3行,第一行,是模板在
 RequisitePro中顯示的名稱,第二行是在RequisitePro中顯示的描述,第三行是定義和模板的關(guān)
 系,是模板的文件名稱。
文檔類型和需求類型定義完成后可以定義需求屬性,默認的需求屬性有:優(yōu)先級、困難程度、穩(wěn)定性、
等,用戶可以自己修改定義需求屬性。
以上完成項目的基本設(shè)置,為了很好的管理項目,可以在項目里分包管理需求和文檔。
建立rose文件,可以為rose文件下的包建立和RequisitePro項目的關(guān)聯(lián),建立關(guān)聯(lián)時會要求指定
關(guān)聯(lián)的文檔類型和需求類型,當(dāng)在這個包內(nèi)定義需求時定義的需求的類型和定義的文件的類型都是在
包關(guān)聯(lián)時定義的。
  然后在rose中可以為用例定義關(guān)聯(lián)的需求和關(guān)聯(lián)的文檔。需求的類型是包關(guān)聯(lián)時指定的。文檔的
  模板來自于包關(guān)聯(lián)時指定的文檔類型的文檔模板。
  可以在RequisitePro中的用例需求和用例規(guī)約文檔關(guān)聯(lián),設(shè)置用例規(guī)約文檔的文檔模板為RUP的
  用例實現(xiàn)規(guī)約。
  這樣當(dāng)在rose中定義用例時,可以自動的在需求關(guān)聯(lián)中定義需求的優(yōu)先級、困難程度等屬性,便于
  以后的需求跟蹤,同時為用例建立用例實現(xiàn)規(guī)約文檔,清楚的描述用例,在rose中就可以之間打開
  用例需求規(guī)約文件進行編輯。
用例需求規(guī)約文件包括的機構(gòu):簡要說明,事件流(基本流、備選流),特殊需求,前置條件,后置
條件,擴展點等。
在需求分析過程中關(guān)鍵的是對用例的定義和清楚的描述,描述的主要是在用例的需求規(guī)約和rose中,
rose中可以通過各種圖形描述用例的不同方面。狀態(tài)圖,活動圖和時序圖。
- 作者: moses  2004年04月13日,星期二 18:02:29   回復(fù)(0 ) | 引用(0 ) | URL
·自定義標(biāo)簽-
  
   使用自定義標(biāo)簽?zāi)軌驕p少jsp中使用java script的機會,使得jsp頁面更容易的維護。
   創(chuàng)建自定義標(biāo)簽的過程:
      1、建立標(biāo)簽處理程序。
              標(biāo)簽處理程序是一個執(zhí)行自定義標(biāo)簽操作的java對象。需要實現(xiàn)TAG接口,不必直接實現(xiàn)TAG接口,從TagSupport類繼承,TagSupper類實現(xiàn)了Tag接口。
          
方法 作用
int doStartTag() throws JspException 處理開始標(biāo)簽
int doEndTag() throws JspException 處理結(jié)束標(biāo)簽
Tag getParent()/void setParent(Tag t) 獲得/設(shè)置標(biāo)簽的父標(biāo)簽
void setPageContext(PageContext pc) pageContext 屬性的 setter 方法
void release() 釋放獲得的所有資源
 
 
      2、創(chuàng)建一個TLD文件。

           TLD 文件有一個 導(dǎo)言(preamble),在這里標(biāo)識 JSP 技術(shù)的版本和使用的標(biāo)簽庫。這個導(dǎo)言通??雌饋硐襁@樣:

 <?xml version="1.0" encoding="UTF-8"?>
                        <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
                        "http://java./dtd/web-jsptaglibrary_1_2.dtd">
                        <taglib>
                        <tlib-version>1.0</tlib-version>  <!--標(biāo)簽庫版本-->
                        <jsp-version>1.2</jsp-version>  <!--對應(yīng)于標(biāo)簽庫所依賴的 JSP 技術(shù)的版本-->
                        <short-name>map</short-name>  <!--定義了 IDE 和其他開發(fā)工具可以使用的標(biāo)簽庫的簡單名-->
<tag> <!--定義標(biāo)簽-->
                        <name>mapDefine</name> <!--標(biāo)簽名稱-->
                        <tag-class>trivera.tags.map.MapDefineTag</tag-class> <!--標(biāo)簽對應(yīng)的標(biāo)簽處理類-->
                        <body-content>JSP</body-content>
                           3、在標(biāo)簽處理程序java類中創(chuàng)建屬性。
      4、在TLD文件中定義和java類中對應(yīng)的屬性。
           TLD中的屬性必須在java類中有對應(yīng)的定義,java類中的屬性不一定要在TLD中實現(xiàn)。
      5、在TLD中聲明script變量。

           要理解 scriptlet 變量,必須理解 TLD 文件的作用。這個文件基本上是元數(shù)據(jù)的一個儲存庫,當(dāng)

JSP 頁轉(zhuǎn)換為 servlet 時,標(biāo)簽會使用這些元數(shù)據(jù)。 在生成的 servlet 中,scriptlet 變量成了本地變量。

要讓 JSP 轉(zhuǎn)換引擎知道這些變量應(yīng)當(dāng)聲明的類型,需要像下面這樣在 TLD 文件中增加項:

       <variable>
                        <name-from-attribute>id</name-from-attribute>
                        <variable-class>java.util.Map</variable-class>
                        <scope>AT_BEGIN</scope>
                        </variable>
                        	將上面的代碼片斷放在 TLD 文件中 body-content 元素之后、attribute 元素之前。 
variable 元素下面,我們聲明了三個子元素:name-from-attribute、variable-class
 scope。 name-from-attribute 指定 id 屬性的值是轉(zhuǎn)換引擎將要定義的 scriptlet 變量的名字。
variable-class 是轉(zhuǎn)換將要定義的變量的類類型。scope 指定變量什么時候可用:
它可以嵌套到標(biāo)簽的正文中 (NESTED)、在標(biāo)簽結(jié)束后 (AT_END)、或者在標(biāo)簽的開始時 
AT_BEGIN)。我們使用 AT_BEGIN 這一范圍,它意味著變量的范圍將是從標(biāo)簽的開始到當(dāng)前 JSP 
頁的結(jié)束。
      6、實現(xiàn) java類中的doStartTag() 方法。在標(biāo)簽處理程序類中,根據(jù)屬性將值設(shè)置到 script 變量中。
 
 
   標(biāo)簽使用:
       在jsp中引入標(biāo)簽:<%@taglib uri="map" prefix="map"%>

       注意這一頁用 map 的 URI 導(dǎo)入了一個自定義標(biāo)簽。之所以能這樣是因為我們在 web.xml 文件中聲明了這個 TLD,如下所示:

 <web-app>
                        ...
                        <taglib>
                        <taglib-uri>map</taglib-uri>
                        <taglib-location>/WEB-INF/tlds/map.tld</taglib-location>
                        </taglib>
                        
本文來自于對DeveloperWorks中自定義標(biāo)簽教程的學(xué)習(xí),參考
http://www-900.ibm.com/developerWorks/cn
/cnonlinetutorial.nsf/gethtml?OpenAgent&url=/developerWorks/cn/education/java
/j-customtags/tutorial/index.html
- 作者: moses  2004年04月8日,星期四 10:32:01   回復(fù)(0 ) | 引用(0 ) | URL
·UML業(yè)務(wù)建模和需求建模-
  
在使用UML進行面向?qū)ο蟮姆治鲈O(shè)計過程中應(yīng)該建立的模型包括
業(yè)務(wù)模型 - 業(yè)務(wù)用例模型
                - 業(yè)務(wù)對象模型
需求模型 - use case 建模
分析和設(shè)計模型 - 分析模型
                          - 設(shè)計模型
實現(xiàn)模型 - implement 。
 
模型是逐層深入,逐層細化。
   業(yè)務(wù)用例模型和業(yè)務(wù)對象模型是對客戶現(xiàn)有業(yè)務(wù)的描述和整理,方便和用戶的交流和理清分析人員的思路,他們同屬于業(yè)務(wù)建模的范疇。在現(xiàn)有分析人員中對此部分的重視程度不足,普遍沒有建立起業(yè)務(wù)用例模型而是直接建立需求模型(use case系統(tǒng)用例)。業(yè)務(wù)對象模型是描述業(yè)務(wù)用例實現(xiàn)的各個對象,以及對象關(guān)系的模型,主要包括業(yè)務(wù)實體和業(yè)務(wù)Actor。
  業(yè)務(wù)用例模型中用活動圖描述用例的過程。
  需求模型(use case模型)(系統(tǒng)用例模型)是建立在對業(yè)務(wù)用例模型的理解上對系統(tǒng)實現(xiàn)的一種規(guī)劃的用例。他是系統(tǒng)將要實現(xiàn)的基礎(chǔ)。一般分析人員是沒有建立業(yè)務(wù)用例模型而直接建立Use case模型,這并不是不可以,但是要建立在分析人員對所描述的業(yè)務(wù)有比較充分的了解的基礎(chǔ)上。
  分析模型是對設(shè)計模型的抽象,設(shè)計模型是對系統(tǒng)原碼框架的描述。具有設(shè)計模型,就可以導(dǎo)出系統(tǒng)的原碼框架。
   設(shè)計模型是說明用例實現(xiàn)的對象模型。在用例模型(use case)和設(shè)計模型之間應(yīng)該包括分析模型,分析模型對設(shè)計模型的抽象是很重要的,他對于建立強壯的系統(tǒng)至關(guān)重要,沒有分析模型也可以,但是建立的系統(tǒng)是脆弱的,是直白的,是無法應(yīng)對業(yè)務(wù)變化的。
 
  類圖描述對象間的靜態(tài)關(guān)系。協(xié)作圖和序列圖是等價的關(guān)系,可以相互轉(zhuǎn)換,協(xié)作圖描述的是對象之間消息的發(fā)送關(guān)系。
   狀態(tài)圖標(biāo)示一個對象受不同事件影響而表現(xiàn)的不同狀態(tài)的變化。
 
   設(shè)計模型之下就是實現(xiàn)模型了。
- 作者: moses  2004年04月5日,星期一 15:33:11   回復(fù)(0 ) | 引用(0 ) | URL
·擴展msn郵箱到25M-
  
首先告訴大家我已經(jīng)安裝成功。還有就是先記住下面文章的步驟。

這是他的原文

現(xiàn)在很多用msn messenger的朋友都有@msn.com或者@hotmail.com的信箱,因為信箱和im聯(lián)動實在是很方便的。但是僅 僅2m大小的信箱是不能滿足大多數(shù)人的要求,如果想要升級到msn資深用戶,每月9塊多美元的服務(wù)費估計國內(nèi)也沒誰愿意出?,F(xiàn)在 可以通過使用微軟給付費用戶發(fā)行的msn9服務(wù)光盤里面的安裝程序來實現(xiàn)對自己的msn賬號升級,不出一分錢可以終身享受資深m sn用戶待遇,大家說是不是爽死了?
下面就來說說方法
下載 http://windirt./msn.rar意目錄,執(zhí)行msnsusiisetup.exe

填入你的hotmail/msn郵件和密碼。
確定是verizon的dsl用戶
關(guān)鍵部分?。?!verizon online email就是你的hotmail的用戶名,比如你有aaa@hotmail.com的郵箱。那么就是aaa@verizon.net。
地址: 任意英文組合
城市:redmond
州:wa(華盛頓)
zip:98052
電話:以 000-0000000 的格式任意數(shù)字組合
等看到三個安裝項目選擇的時候,直接退出就可以了,沒有必要安裝,因為我們的目標(biāo)已經(jīng)達成。
登陸msn信箱察看你的郵箱大小吧
·23種設(shè)計模式介紹-
  

23個設(shè)計模式列表

創(chuàng)建型模式... 2

1.                Abstract Factory.. 2提供一個創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無須指定它們具體的類。

2.                Builder 2  將一個復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。

3.                Factory Method.. 3定義一個用于創(chuàng)建對象的接口,讓子類決定實例化哪一個類。使一個類的實例化延遲到其子類。

4.                Prototype.. 3用原型實例指定創(chuàng)建對象的種類,并通過拷貝這些原型創(chuàng)建新的對象。

5.                Singleton. 3  保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。

結(jié)構(gòu)型模式... 4

1.                Adapter. 4將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口。

2.                Bridge.. 4將抽象部分與它的實現(xiàn)部分分離,使它們都可以獨立的變化。

3.                Composite.. 5將對象組合成樹形結(jié)構(gòu)以表示部分-整體的層次結(jié)構(gòu)。

4.                Decorator. 5動態(tài)地給一個對象添加一些額外的職責(zé)。

5.                Façade.. 6為子系統(tǒng)中的一組接口提供一個一致的界面,Facade模式定義了一個高層接口,這個接口使得這一子系統(tǒng)更加容易使用。

6.                Flyweight. 6運用共享技術(shù)有效地支持大量細粒度的對象。

7.                Proxy.. 7為其它對象提供一種代理以控制對這個對象的訪問。

行為模式... 7

1.                Chain of Responsibility. 7  使多個對象都有機會處理請求,從而避免請求的發(fā)送者和接收者之間的耦合關(guān)系。

2.                Command. 7  將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進行參數(shù)化;對請求排隊或記錄請求日志,以及支持可撤消的操作。

3.                Interpreter. 8給定一個語言,定義它的文法的一種表示,并定義一個解釋器,這個解釋器使用該表示來解釋語句中的句子。

4.                Iterator 8  提供一種方法順序訪問一個聚合對象中的各個元素,而不需要暴露該對象的內(nèi)部表示。

5.                Mediator 8  用一個中介對象來封裝一系列的對象交互。

6.                Memento.. 9在不破壞封裝性的前提下,捕獲一個對象的內(nèi)部狀態(tài),并在該對象之外保存這個狀態(tài)。

7.                Observer 9  定義對象間的一種一對多的依賴關(guān)系,當(dāng)一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知并自動更新。

8.                State.. 9允許一個對象在其內(nèi)部狀態(tài)改變時改變它的行為。

9.                Strategy. 10  定義一系列的算法,把它們一個個封裝起來,并且使它們可以相互替換。

10.              Template Method.. 10定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。

11.              Visitor. 10表示一個作用于某對象結(jié)構(gòu)中的各元素的操作。

 

創(chuàng)建型模式

5

1.     Abstract Factory

 抽象工廠
 
提供一個創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無須指定它們具體的類。(別名:Kit
 
實例描述:

交互圖

優(yōu)缺點

    優(yōu)點:(1)封裝創(chuàng)建過程??蛻舨挥弥李悘S是如何創(chuàng)建類實例的,類廠封閉了所有創(chuàng)建的細節(jié)。這樣可選擇不同的創(chuàng)建方法,增加了靈活性。 (2)將客戶與具體類隔離,提高了各自的可重用性。
    缺點:Factory類層次與具體類層次通常是平行的(即一一對應(yīng)的)。增加一個具體類,一般也要相應(yīng)地增加一個factory類,增加了系統(tǒng)復(fù)雜度。

實現(xiàn)

    (1)Abstract Factory類中通常是一組Factory Method的集合。個人認為與Factory Method模式?jīng)]有本質(zhì)區(qū)別。
    (2)通??梢园压S作為單件。

2.     Builder

 生成器
 將一個復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。

各類之間的交互關(guān)系如下圖所示:

 

3.     Factory Method

 工廠方法
 
定義一個用于創(chuàng)建對象的接口,讓子類決定實例化哪一個類。使一個類的實例化延遲到其子類。(別名:虛構(gòu)造器 Virtual Constructor

4.     Prototype

 原型
 
用原型實例指定創(chuàng)建對象的種類,并通過拷貝這些原型創(chuàng)建新的對象。

5.     Singleton

 單件
 
保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。

結(jié)構(gòu)型模式

7

1.     Adapter


 
適配器
 
將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口。Adapter模式使得原本由于接口不兼容而不能在一起工作的那些類可以一起工作。(別名:包裝器 Wrapper

2.     Bridge

 橋接
 
將抽象部分與它的實現(xiàn)部分分離,使它們都可以獨立的變化。(別名:Handle/Body

例如

3.     Composite

 組合
 
將對象組合成樹形結(jié)構(gòu)以表示部分-整體的層次結(jié)構(gòu)。Composite使得用戶對單個對象和組合對象的使用具有一致性。

4.     Decorator

 裝飾
 
動態(tài)地給一個對象添加一些額外的職責(zé)。就增加功能來說,Decorator模式相比生成子類更為靈活。(別名:包裝器Wrapper

5.     Façade

 外觀
 
為子系統(tǒng)中的一組接口提供一個一致的界面,Facade模式定義了一個高層接口,這個接口使得這一子系統(tǒng)更加容易使用。

6.     Flyweight

 享元
 運用共享技術(shù)有效地支持大量細粒度的對象。

這么模式中最重要的概念是內(nèi)部狀態(tài)和外部狀態(tài)。內(nèi)部狀態(tài)存儲于flyweight中,包含了獨立于flyweight場景的外部狀態(tài),這些信息使得flyweight可以被共享;外部狀態(tài)取決于flyweight場景,并根據(jù)場景變化,因此不可共享。用戶負責(zé)在必要的時候?qū)⑼獠繝顟B(tài)傳遞給flyweight.


1) Remote Proxy 可以隱藏一個對象存在于不同地址空間的事實;
2) Virtual Proxy
可以進行優(yōu)化,例如在顯示包含大圖片的文檔時,在初始時可以不顯示圖片,只顯示圖片的大小,根據(jù)需要再創(chuàng)建圖片對象,顯示圖片;
3) Protection Proxies
可以在訪問一個對象是附加一些內(nèi)務(wù)處理,如權(quán)限驗證等
4) Smart Reference
可以智能地管理代理引用的對象,如對引用的對象記數(shù),沒有引用時釋放對象;為引用對象加鎖等;

 

7.     Proxy

 代理
 
為其它對象提供一種代理以控制對這個對象的訪問。(別名:Surrogate 

行為模式

11

1.     Chain of Responsibility

 職責(zé)鏈
 使多個對象都有機會處理請求,從而避免請求的發(fā)送者和接收者之間的耦合關(guān)系。將這些對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有一個對象處理它為止。


CoR的優(yōu)點:
因為無法預(yù)知來自外界的請求是屬于哪種類型,每個類如果碰到它不能處理的請求只要放棄就可以。無疑這降低了類之間的耦合性。

缺點是效率低,因為一個請求的完成可能要遍歷到最后才可能完成,當(dāng)然也可以用樹的概念優(yōu)化。 在Java AWT1.0中,對于鼠標(biāo)按鍵事情的處理就是使用CoR,到Java.1.1以后,就使用Observer代替CoR

擴展性差,因為在CoR中,一定要有一個統(tǒng)一的接口Handler.局限性就在這里。

 

2.     Command

 命令
 
將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進行參數(shù)化;對請求排隊或記錄請求日志,以及支持可撤消的操作。(別名:動作 Action 事務(wù) Transaction

3.     Interpreter

 解釋器
 
給定一個語言,定義它的文法的一種表示,并定義一個解釋器,這個解釋器使用該表示來解釋語句中的句子。

4.     Iterator

 迭代器
 
提供一種方法順序訪問一個聚合對象中的各個元素,而不需要暴露該對象的內(nèi)部表示。(別名:游標(biāo) Cursor

5.     Mediator

 中介者
 
用一個中介對象來封裝一系列的對象交互。中介者使各對象不需要顯式地相互引用,從而使其耦合松散,而且可以獨立地改變它們之間的交互。

6.     Memento

 備忘錄
 
在不破壞封裝性的前提下,捕獲一個對象的內(nèi)部狀態(tài),并在該對象之外保存這個狀態(tài)。這樣以后就可將該對象恢復(fù)到原先保存的狀態(tài)。(別名:Token)
 

對象交互圖

 

   一般情況下,Memento要存取Originator的私有數(shù)據(jù),一種方法是把Memento設(shè)為Originator的友元,讓Memento自己來取數(shù)據(jù)。另一種方法是Originator自己把自己的私有數(shù)據(jù)告訴給Memento。

7.     Observer

 觀察者
 
定義對象間的一種一對多的依賴關(guān)系,當(dāng)一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知并自動更新。(別名:依賴Dependents,發(fā)布-訂閱 Publish-Subscribe

8.     State

 狀態(tài)
 
允許一個對象在其內(nèi)部狀態(tài)改變時改變它的行為。對象看起來似乎修改了它的類。(別名:狀態(tài)對象 Objects for States

9.     Strategy

 策略
 
定義一系列的算法,把它們一個個封裝起來,并且使它們可以相互替換。本模式使得算法可以獨立于使用它的客戶而變化。(別名:政策 Policy

10.           Template Method

 模板方法
 
定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。Template Method使得子類可以不改變一個算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。

11.           Visitor

 訪問者
 
表示一個作用于某對象結(jié)構(gòu)中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用于這些元素的新操作。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多