1. 程式人生 > >結構型模式之組合模式:防毒系統

結構型模式之組合模式:防毒系統

一、題目

設計一款防毒軟體,客戶可以直接對檔案(ImageFile和TextFile)進行防毒也可以對某個指定資料夾(ImageFolder和TextFolder)下的檔案進行防毒。

java實現

Interface介面:

public interface Interface {
void setName(String name);

//新增子目錄的方法
void add(Interface face);

//新增子目錄的方法
    void remove(Interface face);
  
  //防毒方法
void kissVirus();

}

ImageFile類

public class ImageFile implements Interface{
String name;

public void setName(String name) {
this.name=name;
}

public void add(Interface face) {
System.out.print("不支援該方法");
}

public void kissVirus() {

System.out.println("對影象檔案"+name+"進行防毒");
}

public void remove(Interface face) {
// TODO Auto-generated method stub
System.out.print("不支援該方法");
}

}

TextFile類

public class TextFile implements Interface{
String name;

public void setName(String name) {
this.name=name;

}

public void add(Interface face) {
System.out.print("不支援該方法");
}

public void kissVirus() {
System.out.println("對文字檔案"+name+"進行防毒");
}

public void remove(Interface face) {
// TODO Auto-generated method stub
System.out.print("不支援該方法");

}

}

ImageFolder

import java.util.ArrayList;
import java.util.List;
public class ImageFolder implements Interface {

String name;
public ArrayList<Interface> list=new ArrayList<Interface>();
//這個集合用來存放資料夾或者檔案
public void setName(String name) {
this.name=name;
}

  //往目錄新增檔案或者資料夾的方法
public void add(Interface face) {
list.add(face);
}

public void remove(Interface face) {
// TODO Auto-generated method stub
list.remove(face);
}

public void kissVirus() {

System.out.print("對"+name+"進行防毒>");
//對子目錄進行歷遍
for(Interface image: list)
{
image.kissVirus();
}
}
}

TextFolder

import java.util.ArrayList;
public class TextFolder implements Interface{
 String name;
 public ArrayList<Interface> list=new ArrayList<Interface>();
   //這個集合用來存放資料夾或者檔案
public void setName(String name) {
// TODO Auto-generated method stub
this.name=name;
}
//往目錄新增檔案或者資料夾的方法
public void add(Interface face) {
// TODO Auto-generated method stub
list.add(face);
}

public void remove(Interface face) {
// TODO Auto-generated method stub
list.remove(face);
}

public void kissVirus() {
// TODO Auto-generated method stub
System.out.print("對"+name+"進行防毒>");

//對集合進行歷遍
for(Interface face:list)
{
face.kissVirus();
}
}
}

客戶類:



public class Action {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TextFile text=new TextFile();
text.setName("李四.txt");
//建立名為“李四.txt”的文字檔案

ImageFile image=new ImageFile();
image.setName("001.jpg");
//建立名為“001.jpg”的影象檔案

ImageFile image1=new ImageFile();
image1.setName("002.jpg");
ImageFolder iFolder1=new ImageFolder();
iFolder1.setName("影象檔案1.0");
iFolder1.add(image1);
ImageFolder iFolder2=new ImageFolder();
iFolder2.setName("影象檔案2.0");
iFolder2.add(iFolder1);
//建立影象檔案2.0>影象檔案1.0>002.jpg。

TextFile text1=new TextFile();
text1.setName("張三.txt");
TextFolder tFolder1=new TextFolder();
tFolder1.setName("文字檔案1.0");
tFolder1.add(text1);
TextFolder tFolder2=new TextFolder();
tFolder2.setName("文字檔案2.0");
tFolder2.add(tFolder1);
//建立文字檔案2.0>文字檔案1.0>張三.txt。

Action action=new Action();
action.kissVirus(text);//直接對文字檔案防毒
action.kissVirus(image);//直接對影象檔案防毒
action.kissVirus(iFolder2);//對資料夾下的文字檔案防毒

action.kissVirus(tFolder2);/對影象檔案下的影象檔案防毒

}

//客戶進行防毒的方法
public void kissVirus(Interface face)
{
face.kissVirus();

}

}

執行結果: