設計模式

  1. .抽象主題角色類 
  2. package com.observe;  
  3.   
  4. public interface AbstractWatched {  
  5.       
  6.     //增加一個觀察者  
  7.     public void addAbstactWatcher(AbstractWatcher watcher);  
  8.       
  9.     //移除一個觀察者  
  10.     public void removeAbstactWatcher(AbstractWatcher watcher);  
  11.       
  12.     //移除所有的觀察着  
  13.     public void removeAll();  
  14.       
  15.     //通知所有的觀察者  
  16.     public void notifyWatchers();  
  17.   
  18. }  

抽象觀察者角色 
  1. package com.observe;  
  2.   
  3. public interface AbstractWatcher {  
  4.       
  5.     public void update();  
  6.   
  7. }  
.具體主題角色(Watched) 
  1. package com.observe;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. public class ConcreteWatched implements AbstractWatched {  
  7.   
  8.     //list:存放觀察者的一個集合對象  
  9.     List<AbstractWatcher> list = new ArrayList<AbstractWatcher>();  
  10.       
  11.     //增加一個觀察者  
  12.     public void addAbstactWatcher(AbstractWatcher watcher) {  
  13.         list.add(watcher);  
  14.   
  15.     }  
  16.   
  17.     //移除一個觀察者  
  18.     public void removeAbstactWatcher(AbstractWatcher watcher) {  
  19.         list.remove(watcher);  
  20.   
  21.     }  
  22.   
  23.     //移除所有的觀察着  
  24.     public void removeAll() {  
  25.         list.clear();  
  26.   
  27.     }  
  28.       
  29.     //通知所有的觀察者  
  30.     public void notifyWatchers() {  
  31.         for(AbstractWatcher watcher : list){  
  32.             watcher.update();  
  33.         }  
  34.   
  35.     }  
  36.   
  37. }  
4.具體觀察者角色(Watcher) 

  1. package com.observe;  
  2.   
  3.   
  4. public class ConcreteWatcher implements AbstractWatcher {  
  5.   
  6.     //觀察到被觀察者發生變化時,執行的方法  
  7.     public void update() {  
  8.         System.out.println("update.....");  
  9.           
  10.     }  
  11.       
  12.       
  13.   
  14. }  

  1. package com.observe;  
  2.   
  3. public class ClientTest {  
  4.   
  5.     public static void main(String[] args){  
  6.         //定義一個被觀察者對象  
  7.         AbstractWatched watched = new ConcreteWatched();  
  8.           
  9.         //定義三個觀察者對象  
  10.         AbstractWatcher watcher1 = new ConcreteWatcher();  
  11.         AbstractWatcher watcher2 = new ConcreteWatcher();  
  12.         AbstractWatcher watcher3 = new ConcreteWatcher();  
  13.           
  14.         //被觀察者添加觀察者. 被觀察者和觀察者之間關係是一對多關係  
  15.         watched.addAbstactWatcher(watcher1);  
  16.         watched.addAbstactWatcher(watcher2);  
  17.         watched.addAbstactWatcher(watcher3);  
  18.           
  19.         System.out.println("第1次...");  
  20.         //被觀察者發生改變時,通知觀察者執行相應方法  
  21.         watched.notifyWatchers();  
  22.           
  23.         //移除一個觀察者  
  24.         watched.removeAbstactWatcher(watcher2);  
  25.           
  26.         System.out.println("第2次...");  
  27.         //被觀察者發生改變時,通知觀察者執行相應方法  
  28.         watched.notifyWatchers();  
  29.           
  30.         //移除一個所有觀察者  
  31.         watched.removeAll();  
  32.           
  33.         System.out.println("第3次...");  
  34.         //被觀察者發生改變時,通知觀察者執行相應方法  
  35.         watched.notifyWatchers();  
  36.           
  37.     }  
  38. }  



【硬連接】
硬連接指通過索引節點來進行連接。在Linux的文件系統中,保存在磁盤分區中的文件不管是什麼類型都給它分配一個編號,稱爲索引節點號(Inode Index)。在Linux中,多個文件名指向同一索引節點是存在的。一般這種連接就是硬連接。硬連接的作用是允許一個文件擁有多個有效路徑名,這樣用戶就可以建立硬連接到重要文件,以防止“誤刪”的功能。其原因如上所述,因爲對應該目錄的索引節點有一個以上的連接。只刪除一個連接並不影響索引節點本身和其它的連接,只有當最後一個連接被刪除後,文件的數據塊及目錄的連接纔會被釋放。也就是說,文件真正刪除的條件是與之相關的所有硬連接文件均被刪除。

【軟連接】
另外一種連接稱之爲符號連接(Symbolic Link),也叫軟連接。軟鏈接文件有類似於Windows的快捷方式。它實際上是一個特殊的文件。在符號連接中,文件實際上是一個文本文件,其中包含的有另一文件的位置信息。



查看文件內容 
cat file1 從第一個字節開始正向查看文件的內容 
tac file1 從最後一行開始反向查看一個文件的內容 
more file1 查看一個長文件的內容 
less file1 類似於 'more' 命令,但是它允許在文件中和正向操作一樣的反向操作 
head -2 file1 查看一個文件的前兩行 
tail -2 file1 查看一個文件的最後兩行 
tail -f /var/log/messages 實時查看被添加到一個文件中的內容 

舉例:(假設我們有一文件名爲ab)
     刪除某行
     [root@localhost ruby# sed '1d' ab              #刪除第一行 
     [root@localhost ruby] # sed '$d' ab              #刪除最後一行
     [root@localhost ruby] # sed '1,2d' ab           #刪除第一行到第二行
     [root@localhost ruby] # sed '2,$d' ab           #刪除第二行到最後一行

  顯示某行
.    [root@localhost ruby# sed -n '1p' ab           #顯示第一行 
     [root@localhost ruby] # sed -n '$p' ab           #顯示最後一行
     [root@localhost ruby] # sed -n '1,2p' ab        #顯示第一行到第二行
     [root@localhost ruby] # sed -n '2,$p' ab        #顯示第二行到最後一行

  使用模式進行查詢
     [root@localhost ruby] # sed -n '/ruby/p' ab    #查詢包括關鍵字ruby所在所有行
     [root@localhost ruby] # sed -n '/\$/p' ab        #查詢包括關鍵字$所在所有行,使用反斜線\屏蔽特殊含義

代替一行或多行
     [root@localhost ruby] # sed '1c Hi' ab                #第一行代替爲Hi
     Hi
     ruby is me,welcome to my blog.
     end
     [root@localhost ruby] # sed '1,2c Hi' ab             #第一行到第二行代替爲Hi
     Hi
     end

  替換一行中的某部分
  格式:sed 's/要替換的字符串/新的字符串/g'   (要替換的字符串可以用正則表達式)
     [root@localhost ruby] # sed -n '/ruby/p' ab | sed 's/ruby/bird/g'    #替換ruby爲bird
   [root@localhost ruby] # sed -n '/ruby/p' ab | sed 's/ruby//g'        #刪除ruby


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章