亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

JAVA基礎:深入淺出Java的訪問者模式

2019-11-18 13:34:03
字體:
來源:轉載
供稿:網友

一、引子

  對于系統中一個已經完成的類層次結構,我們已經給它提供了滿足需求的接口。但是面對新增加的需求,我們應該怎么做呢?假如這是為數不多的幾次變動,而且你不用為了一個需求的調整而將整個類層次結構統統地修改一遍,那么直接在原有類層次結構上修改也許是個 不錯 的主意。

  但是往往我們碰到的卻是:這樣的需求變動也許會不停的發生;更重要的是需求的任何變動可能都要讓你將整個類層次結構修改個底朝天……。這種類似的操作分布在不同的類里面,不是一個好現象,我們要對這個結構重構一下了。

  那么,訪問者模式也許是你很好的選擇。

  二、定義與結構

  訪問者模式,顧名思義使用了這個模式后就可以在不修改已有程序結構的前提下,通過添加額外的“訪問者”來完成對已有代碼功能的提升。

  《設計模式》一書對于訪問者模式給出的定義為:表示一個作用于某對象結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用于這些元素的新操作。從定義可以看出結構對象是使用訪問者模式必須條件,而且這個結構對象必須存在遍歷自身各個對象的方法。這便類似于java中的collection概念了。

  以下是訪問者模式的組成結構:

  1) 訪問者角色(Visitor):為該對象結構中具體元素角色聲明一個訪問操作接口。該操作接口的名字和參數標識了發送訪問請求給具體訪問者的具體元素角色。這樣訪問者就可以通過該元素角色的特定接口直接訪問它。

  2) 具體訪問者角色(Concrete Visitor):實現每個由訪問者角色(Visitor)聲明的操作。

  3) 元素角色(Element):定義一個Accept操作,它以一個訪問者為參數。

  4) 具體元素角色(Concrete Element):實現由元素角色提供的Accept操作。

  5) 對象結構角色(Object StrUCture):這是使用訪問者模式必備的角色。它要具備以下特征:能枚舉它的元素;可以提供一個高層的接口以答應該訪問者訪問它的元素;可以是一個復合(組合模式)或是一個集合,如一個列表或一個無序集合。

  來張類圖就能更加清楚的看清訪問者模式的結構了。



  那么像引言中假想的。我們應該做些什么才能讓訪問者模式跑起來呢?首先我們要在原有的類層次結構中添加accept方法。然后將這個類層次中的類放到一個對象結構中去。這樣再去創建訪問者角色……

  三、舉例

  本人閱歷實在可憐,沒能找到訪問者模式在實際應用中的例子。只好借《Thinking in Patterns with java》中的教學代碼一用。我稍微做了下修改。

import java.util.*; 
import junit.framework.*;

//訪問者角色

interface Visitor {
 void visit(Gladiolus g);
 void visit(Runuculus r);
 void visit(Chrysanthemum c);
}

// The Flower hierarchy cannot be changed:
//元素角色

interface Flower {
 void accept(Visitor v);
}

//以下三個具體元素角色

class Gladiolus implements Flower {
 public void accept(Visitor v) { v.visit(this);}
}

class Runuculus implements Flower {
 public void accept(Visitor v) { v.visit(this);}
}

class Chrysanthemum implements Flower {
 public void accept(Visitor v) { v.visit(this);}
}

// Add the ability to PRoduce a string:
//實現的具體訪問者角色

class StringVal implements Visitor {
 String s;
 public String toString() { return s; }
 public void visit(Gladiolus g) {
  s = "Gladiolus";
 }

 public void visit(Runuculus r) {
  s = "Runuculus";
 }

 public void visit(Chrysanthemum c) {
  s = "Chrysanthemum";
 }
}

// Add the ability to do "Bee" activities:
//另一個具體訪問者角色

class Bee implements Visitor {
 public void visit(Gladiolus g) {
  System.out.println("Bee and Gladiolus");
 }

 public void visit(Runuculus r) {
  System.out.println("Bee and Runuculus");
 }

 public void visit(Chrysanthemum c) {
  System.out.println("Bee and Chrysanthemum");
 }
}

//這是一個對象生成器
//這不是一個完整的對象結構,這里僅僅是模擬對象結構中的元素

class FlowerGenerator {
 private static Random rand = new Random();
 public static Flower newFlower() {
   switch (rand.nextInt(3)) {
  default:
   case 0: return new Gladiolus(); 
   case 1: return new Runuculus();
   case 2: return new Chrysanthemum();
  }
 }
}
三層交換技術 交換機與路由器密碼恢復 交換機的選購 路由器設置專題 路由故障處理手冊 數字化校園網解決方案



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人久久久精品一区| 久久国产精品亚洲| 精品二区三区线观看| 国产精品pans私拍| 亚洲片国产一区一级在线观看| 亚洲韩国欧洲国产日产av| 欧美疯狂性受xxxxx另类| 这里只有视频精品| 国产日韩精品在线| 91国产美女视频| 国产精品日韩电影| 日韩精品视频在线观看免费| 久久久91精品| 日韩精品视频免费专区在线播放| 91亚洲va在线va天堂va国| 中文字幕日本精品| 国产不卡av在线| 国产精品免费看久久久香蕉| 亚洲视频专区在线| 日韩a**中文字幕| 欧美日韩国产综合新一区| 狠狠色噜噜狠狠狠狠97| 国产精品久久9| 日韩久久午夜影院| 中文字幕亚洲国产| 热久久视久久精品18亚洲精品| 久久综合国产精品台湾中文娱乐网| 91av在线看| 久久久久久久999| 国产综合色香蕉精品| 91国产高清在线| 高清欧美一区二区三区| 精品高清美女精品国产区| 成人h视频在线观看播放| 日本精品中文字幕| 欧美丝袜美女中出在线| 黑人与娇小精品av专区| 97色伦亚洲国产| 97视频免费观看| 成人在线国产精品| 92看片淫黄大片看国产片| 亚洲精品久久久久国产| 欧美精品精品精品精品免费| 国产精品久久国产精品99gif| 精品夜色国产国偷在线| 一区二区成人精品| 精品高清一区二区三区| 国产精品久在线观看| 久久精品国产91精品亚洲| 亚洲人成网7777777国产| 色噜噜亚洲精品中文字幕| 国产亚洲一区二区精品| 亚洲精品国产美女| 国产精品久久久久久久app| 亚洲欧美一区二区三区久久| 欧美国产日产韩国视频| 久久视频免费观看| 久久久久久久久久久成人| 国产精品美女999| 日韩在线欧美在线国产在线| 午夜精品久久久久久99热软件| 国产日韩av在线| 中文字幕日韩在线视频| 色综合天天综合网国产成人网| 97超级碰在线看视频免费在线看| 91牛牛免费视频| 国产在线久久久| 欧美激情成人在线视频| 欧美国产极速在线| 91高清免费在线观看| 日韩电影免费在线观看| 2019最新中文字幕| 97在线精品视频| 亚洲free性xxxx护士白浆| 久久综合免费视频影院| 日本欧美一二三区| 国产成人一区二区三区电影| 青青青国产精品一区二区| 日韩精品小视频| 中文字幕日韩有码| 亚洲精品国产综合久久| 欧美极品少妇xxxxⅹ免费视频| 亚洲人成免费电影| 国产精品久久久久免费a∨| 欧美性xxxxx| 日韩在线观看网站| 中文字幕v亚洲ⅴv天堂| 91在线网站视频| 国产精品久久一区主播| 亚洲欧美日韩中文在线| 亚洲精品日韩av| 日韩视频免费观看| 欧美极品欧美精品欧美视频| 国产欧美日韩精品丝袜高跟鞋| 欧美在线视频播放| 国产a级全部精品| 青青a在线精品免费观看| 91av在线播放视频| 久久九九国产精品怡红院| 精品久久久一区| 日韩av资源在线播放| 亚洲精品一区在线观看香蕉| 色综合久久中文字幕综合网小说| 亚洲成人网在线观看| 亚洲精品美女在线观看播放| 国产精品一二区| 欧美成人免费全部观看天天性色| 91精品综合久久久久久五月天| 亚洲娇小xxxx欧美娇小| 一区二区三区回区在观看免费视频| 日韩在线视频免费观看高清中文| 亚洲女性裸体视频| 亚洲成人久久一区| 国产福利成人在线| 91在线免费视频| 久久99久久99精品中文字幕| 成人在线视频网| 美女999久久久精品视频| 日韩精品欧美国产精品忘忧草| 亚洲精品日韩在线| 久久伊人91精品综合网站| 26uuu国产精品视频| 亚洲v日韩v综合v精品v| 精品久久久国产| 91在线高清视频| 成人在线视频网站| 日韩大片免费观看视频播放| 久久久久这里只有精品| 日韩成人在线网站| 6080yy精品一区二区三区| 成人国产精品久久久| 色婷婷综合久久久久| 国产精品日韩在线观看| 国产精品av免费在线观看| 国产视频在线观看一区二区| 亚洲国产精品久久精品怡红院| 亚洲国产另类久久精品| 国产精品影片在线观看| 欧美电影院免费观看| 欧美性jizz18性欧美| 亚洲精品网站在线播放gif| 国产欧美最新羞羞视频在线观看| 国产精品久久久久久久av大片| 亚洲国产日韩一区| 久久久女女女女999久久| 色婷婷亚洲mv天堂mv在影片| 亚洲电影成人av99爱色| 日韩美女免费视频| 中文字幕无线精品亚洲乱码一区| 亚洲自拍欧美另类| 亚洲电影免费在线观看| 韩剧1988在线观看免费完整版| 亚洲欧美中文字幕在线一区| 国产精品中文字幕在线观看| 欧美成人午夜激情在线| 欧洲精品在线视频| 国产精品精品一区二区三区午夜版| 欧美激情国产日韩精品一区18| 午夜精品一区二区三区在线| 一区二区成人av| 日韩视频―中文字幕| 日韩在线播放视频| 在线视频国产日韩| 最近2019中文字幕一页二页|