欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來(lái)到入門教程網(wǎng)!

Java編程

當(dāng)前位置:主頁(yè) > 軟件編程 > Java編程 >

舉例講解設(shè)計(jì)模式中的訪問(wèn)者模式在Java編程中的運(yùn)用

來(lái)源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:Java編程|點(diǎn)擊: 次

訪問(wèn)者(Visitor)模式:封裝一些作用于某種數(shù)據(jù)結(jié)構(gòu)中的各元素的操作,它可以在不改變這個(gè)數(shù)據(jù)結(jié)構(gòu)的前提下定義作用于這些元素的新的操作。訪問(wèn)者模式的結(jié)構(gòu)圖如下:

通過(guò)上圖可以看到他有如下角色:
抽象訪問(wèn)者(Visitor)角色:定義接口,聲明一個(gè)或多個(gè)訪問(wèn)操作。
具體訪問(wèn)者(ConcreteVisitor)角色:實(shí)現(xiàn)抽象訪問(wèn)者所聲明的接口,也就是抽象訪問(wèn)者所聲明的各個(gè)訪問(wèn)操作。
抽象元素(Visitable)角色:聲明一個(gè)接受操作,接受一個(gè)訪問(wèn)者對(duì)象作為一個(gè)參數(shù)。
具體元素結(jié)點(diǎn)(ConcreteElement)角色:實(shí)現(xiàn)抽象結(jié)點(diǎn)所規(guī)定的接受操作。
數(shù)據(jù)結(jié)構(gòu)對(duì)象(ObjectStructure)角色:可以遍歷結(jié)構(gòu)中的所有元素,提供一個(gè)接口讓訪問(wèn)者對(duì)象都可以訪問(wèn)每一個(gè)元素。
模擬代碼如下:

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

// concrete visitor   名稱訪問(wèn) 
class StringVisitor implements Visitor { 
  String s; 
 
  public String toString() { 
    return s; 
  } 
 
  public void visit(Gladiolus g) { 
    s = "Gladiolus"; 
  } 
 
  public void visit(Chrysanthemum c) { 
    s = "Chrysanthemum"; 
  } 
} 

 

// concrete visitor   蜜蜂訪問(wèn) 
class BeeVisitor implements Visitor { 
  public void visit(Gladiolus g) { 
    System.out.println("蜜蜂 來(lái) 訪問(wèn) Gladiolus"); 
  } 
 
  public void visit(Chrysanthemum c) { 
    System.out.println("蜜蜂 來(lái) 訪問(wèn) Chrysanthemum"); 
  } 
} 
 
interface Flower { 
  void accept(Visitor v); 
} 

 

/* 
 * concrete element   菊花 
 */ 
class Chrysanthemum implements Flower { 
  public void accept(Visitor v) { 
    v.visit(this); 
  } 
} 

 

// concrete element   劍蘭 
class Gladiolus implements Flower { 
  public void accept(Visitor v) { 
    v.visit(this); 
  } 
} 

 

//這是Flower一個(gè)對(duì)象生成器 
class FlowerGenerator { 
  private static Random rand = new Random(); 
 
  public static Flower newFlower() { 
    switch (rand.nextInt(2)) { 
    default: 
    case 0: 
      return new Gladiolus(); 
    case 1: 
      return new Chrysanthemum(); 
    } 
  } 
} 
public class Test { 
  /* 
   * 首先在客戶端先獲得一個(gè)具體的訪問(wèn)者角色 遍歷對(duì)象結(jié)構(gòu) 對(duì)每一個(gè)元素調(diào)用accept方法,將具體訪問(wèn)者角色傳入 這樣就完成了整個(gè)過(guò)程 
   */ 
  public static void main(String args[]) { 
    List<Flower> flowers = new ArrayList<Flower>(); 
    for (int i = 0; i < 10; i++) 
      flowers.add(FlowerGenerator.newFlower()); 
    Visitor visitor = new StringVisitor(); 
    Iterator<Flower> iterator = flowers.iterator(); 
    while (iterator.hasNext()) { 
      iterator.next().accept(visitor); 
      System.out.println(visitor); 
    } 
    System.out.println("---------------"); 
    /* 
     * 一個(gè)新的訪問(wèn)行為 :BeeVisitor 蜜蜂訪問(wèn) 
     */ 
    Visitor visitor2 = new BeeVisitor(); 
    for (Flower flower : flowers) { 
      flower.accept(visitor2); 
    } 
 
  } 
} 

結(jié)果:

Gladiolus 
Chrysanthemum 
Chrysanthemum 
Gladiolus 
Chrysanthemum 
Chrysanthemum 
Chrysanthemum 
Chrysanthemum 
Gladiolus 
Gladiolus 
--------------- 
蜜蜂 來(lái) 訪問(wèn) Gladiolus 
蜜蜂 來(lái) 訪問(wèn) Chrysanthemum 
蜜蜂 來(lái) 訪問(wèn) Chrysanthemum 
蜜蜂 來(lái) 訪問(wèn) Gladiolus 
蜜蜂 來(lái) 訪問(wèn) Chrysanthemum 
蜜蜂 來(lái) 訪問(wèn) Chrysanthemum 
蜜蜂 來(lái) 訪問(wèn) Chrysanthemum 
蜜蜂 來(lái) 訪問(wèn) Chrysanthemum 
蜜蜂 來(lái) 訪問(wèn) Gladiolus 
蜜蜂 來(lái) 訪問(wèn) Gladiolus 

有以下情形可以考慮使用訪問(wèn)者模式:

1、一個(gè)對(duì)象結(jié)構(gòu)包含很多類對(duì)象,它們有不同的接口,而你想對(duì)這些對(duì)象實(shí)施一些依賴于其具體類的操作。
2、需要對(duì)一個(gè)對(duì)象結(jié)構(gòu)中的對(duì)象進(jìn)行很多不同的并且不相關(guān)的操作,而你想避免讓這些操作“污染”這些對(duì)象的類。Visitor使得你可以將相關(guān)的操作集中起來(lái)定義在一個(gè)類中。
3、當(dāng)該對(duì)象結(jié)構(gòu)被很多應(yīng)用共享時(shí),用Visitor模式讓每個(gè)應(yīng)用僅包含需要用到的操作。
4、 定義對(duì)象結(jié)構(gòu)的類很少改變,但經(jīng)常需要在此結(jié)構(gòu)上定義新的操作。改變對(duì)象結(jié)構(gòu)類需要重定義對(duì)所有訪問(wèn)者的接口,這可能需要很大的代價(jià)。如果對(duì)象結(jié)構(gòu)類經(jīng)常改變,那么可能還是在這些類中定義這些操作較好。
這些個(gè)人看來(lái)都是建議,項(xiàng)目中還要具體問(wèn)題具體分析了。
 

上一篇:Java 回調(diào)函數(shù)詳解及使用

欄    目:Java編程

下一篇:Apache Camel的Java編程入門指南

本文標(biāo)題:舉例講解設(shè)計(jì)模式中的訪問(wèn)者模式在Java編程中的運(yùn)用

本文地址:http://mengdiqiu.com.cn/a1/Javabiancheng/8474.html

網(wǎng)頁(yè)制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語(yǔ)言數(shù)據(jù)庫(kù)服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有