結構型模式之組合模式:防毒系統
阿新 • • 發佈:2019-02-18
一、題目
設計一款防毒軟體,客戶可以直接對檔案(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();
}
}
執行結果: