您的位置:首页 > 编程语言 > Java开发

设计模式

2014-05-08 00:31 323 查看
.抽象主题角色类 

package com.observe;  

  

public interface AbstractWatched {  

      

    //增加一个观察者  

    public void addAbstactWatcher(AbstractWatcher watcher);  

      

    //移除一个观察者  

    public void removeAbstactWatcher(AbstractWatcher watcher);  

      

    //移除所有的观察着  

    public void removeAll();  

      

    //通知所有的观察者  

    public void notifyWatchers();  

  

}  

抽象观察者角色 

package com.observe;  

  

public interface AbstractWatcher {  

      

    public void update();  

  

}  
.具体主题角色(Watched) 

package com.observe;  

  

import java.util.ArrayList;  

import java.util.List;  

  

public class ConcreteWatched implements AbstractWatched {  

  

    //list:存放观察者的一个集合对象  

    List<AbstractWatcher> list = new ArrayList<AbstractWatcher>();  

      

    //增加一个观察者  

    public void addAbstactWatcher(AbstractWatcher watcher) {  

        list.add(watcher);  

  

    }  

  

    //移除一个观察者  

    public void removeAbstactWatcher(AbstractWatcher watcher) {  

        list.remove(watcher);  

  

    }  

  

    //移除所有的观察着  

    public void removeAll() {  

        list.clear();  

  

    }  

      

    //通知所有的观察者  

    public void notifyWatchers() {  

        for(AbstractWatcher watcher : list){  

            watcher.update();  

        }  

  

    }  

  

}  
4.具体观察者角色(Watcher) 

package com.observe;  

  

  

public class ConcreteWatcher implements AbstractWatcher {  

  

    //观察到被观察者发生变化时,执行的方法  

    public void update() {  

        System.out.println("update.....");  

          

    }  

      

      

  

}  

package com.observe;  

  

public class ClientTest {  

  

    public static void main(String[] args){  

        //定义一个被观察者对象  

        AbstractWatched watched = new ConcreteWatched();  

          

        //定义三个观察者对象  

        AbstractWatcher watcher1 = new ConcreteWatcher();  

        AbstractWatcher watcher2 = new ConcreteWatcher();  

        AbstractWatcher watcher3 = new ConcreteWatcher();  

          

        //被观察者添加观察者. 被观察者和观察者之间关系是一对多关系  

        watched.addAbstactWatcher(watcher1);  

        watched.addAbstactWatcher(watcher2);  

        watched.addAbstactWatcher(watcher3);  

          

        System.out.println("第1次...");  

        //被观察者发生改变时,通知观察者执行相应方法  

        watched.notifyWatchers();  

          

        //移除一个观察者  

        watched.removeAbstactWatcher(watcher2);  

          

        System.out.println("第2次...");  

        //被观察者发生改变时,通知观察者执行相应方法  

        watched.notifyWatchers();  

          

        //移除一个所有观察者  

        watched.removeAll();  

          

        System.out.println("第3次...");  

        //被观察者发生改变时,通知观察者执行相应方法  

        watched.notifyWatchers();  

          

    }  

}  

【硬连接】

硬连接指通过索引节点来进行连接。在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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java