訂閱屬於自己得資料(Visitor) (轉)
有時候.我們總是不希望出現不速之客.而是更希望來的是我們的朋友.可是如果
用一支普通的筆把所有人的名字記錄下來我們很難判斷那些才是我們的朋友.所
以.如果有一支友情之筆和一個之能呈現友情之筆的筆記本.那麼情況就好的多了.
就如同當你使用ArrayList或Hashtable之類的容器裝載資料的時候.所有的資料都
別染成了同樣的顏色--- 而你必須時刻判斷是否你想要的資料型別.你可能
總是在寫if (o is yourType)這樣的這樣很麻煩.也沒必要.因為你現在是要限定
訪問者.而不是一個可以容納所有的容器.或許你會說可以使用陣列yourType[] yt
那麼.很遺憾.你無法很方面的迭代和插入.刪除.查詢等容器可以方面完成的
東西.同樣你是為了把容器中的漂洗出來,才那樣作而不是真得為了取代容器
本身.因此現在你存在的問題如何指定一個你所需要的容器.這也就是為什麼要
提出visitor的必要性.那麼同樣我們還是來分工和抽象.透過上面的描述
需要兩份工作來完成這個操作.一個是負責定製訪問的Visitors 另一個則是
用來確定訪問型別的.也就是說他是守門的.只有符合型別才可以透過.其實這
個模式很簡單.OK還是從一個簡單的假設開始.
我們以我剛才說的朋友列表開始.朋友具有友情之筆所以是可以寫入到中的.
而沒有的就不可以.
//Visitors抽象物件開始
public interface IVisitors{
void ListVisitor(IList IL);//迭代判斷訪問容器中好友
void operationf (Friend f);//如果是好友就顯示
}
public class FrVisitor : IVisitors{
public void ListVisitor(IList IL){
int count,Item=0;
count=IL.Count;
//迭代元素
for (Item;Item
(Visitable (IL[Item])).accept(this);
}
}
public void operationf(Friend f){
Console.WriteLine("好友是:"+f.neme);
}
}
//可訪問物件得介面
public interface IVisitable{
void accept (IVisitor v) ;
}
public class Friend : IVisitable{
public string name;
public Friend(string n){
this.name=n;
}
public void accept(IVisitor v){
v.operationf(this);
}
}
//下面客戶
public class Client
{
public static int Main(string[] args)
{
ArrayList al=new ArrayList();
Friend f1=Friend("yarshray");
Friend f2=Friend("Tommy");
al.Add("baoy");
al.Add("Bow");
al.Add(f1);
al.Add(f2);
FrVisitor fv=new FrVisitor();
fv.ListVisitor(al);
return 0;
}
}
最終只有好友才被顯示出來.事實上.當你在用而不是直接和打交道得時候
使用Visitor模式可以起到和資料檢視一樣得效果.把客戶不希望看到得資料遮蔽掉.而
之給客戶感興趣得資料.Visitor本身不儲存任何資料.只是作迭代和判斷.而Visiable
則負責是否處理.儲存依然交給容器.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-998944/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 製作屬於自己得nuget包
- SQLServer 2012複製訂閱資料訂閱過程SQLServer
- 關於 TDengine 3.0 資料訂閱,你需要知道這些
- 獲得Azure訂閱LoadBalancer的指令碼指令碼
- YouTube資料:誰獲得了最多訂閱者?
- 打造屬於自己的underscore系列 ( 二 ) - 資料型別診斷資料型別
- 如何在電腦中建立屬於自己的私密資料夾?
- 讓Windows XP的控制皮膚“屬於自己”(轉)Windows
- 你覺得買遊戲合算還是訂閱遊戲合算?遊戲
- Windows 10即將“被訂閱”:關於訂閱制的痛並快樂Windows
- 解析ws訂閱返回的GZIP 壓縮資料
- 開源基於Canal的開源增量資料訂閱&消費中介軟體
- 關於每日新聞郵件訂閱
- 基於 Redis 的訂閱與釋出Redis
- 基於java的RSS線上訂閱demoJava
- Greenplum,PostgreSQL資料實時訂閱的幾種方式SQL
- Zookeeper應用場景之【資料釋出/訂閱】
- Visitor Pattern Introduction (轉)
- Java MQTT訂閱端,可訂閱萬用字元(/#)JavaMQQT字元
- 前端資源整理 – 訂閱、工具等前端
- 釋出於訂閱訊息系統-KafkaKafka
- Redisson-關於使用訂閱數問題Redis
- 21年-25年美國創作者獲得社交媒體訂閱收入及同比預測(附原資料表)
- 學會閱讀原始碼後,我覺得自己better了原始碼
- spark基本概念(便於自己隨時查閱–摘自Spark快速大資料分析)Spark大資料
- RSS 一種簡潔優雅的資料訂閱方式
- js視訊轉字元畫 —— 寫一個屬於自己的字元轉換器JS字元
- 小心訂閱模式模式
- openGauss 訂閱
- 利用WordPress搭建屬於自己的網站網站
- 搭建屬於自己的個人部落格
- 打造屬於你自己的私人大資料顧問(科技|財經|生活購物方面)大資料
- 阿里釘釘資訊保安國際領先:資料是屬於使用者自己的阿里
- 搞懂:MVVM模型以及VUE中的資料繫結資料劫持釋出訂閱模式MVVM模型Vue模式
- C#+arcengine獲得柵格資料的屬性表C#
- Steam或推出訂閱制?資料探勘後臺神祕程式碼
- 遊戲雜談:聊聊遊戲訂閱制、大資料分析、發行渠道遊戲大資料
- 微信小程式訂閱微信小程式