使用组合模式设计一个杀毒软件框架,该软件既可以对一个文件夹杀毒,也可以对一个文件杀毒,文件种类包括文本文件、图片文件、视频文件。绘制类图并编程实现。
public abstract class AbstractFile {
public abstract void add(AbstractFile file);
public abstract void remove(AbstractFile file);
public abstract AbstractFile getChild(int i);
public abstract void killvrius();
}
import java.util.ArrayList;
public class Folder extends AbstractFile{
private ArrayList<AbstractFile>fileList=new ArrayList<AbstractFile>();
private String name;
public Folder(String name) {
this.name = name;
}
@Override
public void add(AbstractFile file) {
System.out.println("不支持该方法");
}
@Override
public void remove(AbstractFile file) {
System.out.println("不支持该方法");
}
@Override
public AbstractFile getChild(int i) {
return(AbstractFile)fileList.get(i);
}
@Override
public void killvrius() {
System.out.println("文件夹杀毒"+name);
for(Object obj:fileList) {
((AbstractFile)obj).killvrius();
}
}
}
public class ImageFile extends AbstractFile{
private String name;
public ImageFile(String name) {
this.name = name;
}
@Override
public void add(AbstractFile file) {
System.out.println("不支持该方法");
}
@Override
public void remove(AbstractFile file) {
System.out.println("不支持该方法");
}
@Override
public AbstractFile getChild(int i) {
System.out.println("不支持该方法");
return null;
}
@Override
public void killvrius() {
System.out.println("视频文件杀毒"+name);
}
}
public class TextFile extends AbstractFile{
private String name;
public TextFile(String name) {
this.name = name;
}
@Override
public void add(AbstractFile file) {
System.out.println("不支持该方法");
}
@Override
public void remove(AbstractFile file) {
System.out.println("不支持该方法");
}
@Override
public AbstractFile getChild(int i) {
System.out.println("不支持该方法");
return null;
}
@Override
public void killvrius() {
System.out.println("视频文件杀毒"+name);
}
}
public class VideoFile extends AbstractFile{
private String name;
public VideoFile(String name) {
this.name = name;
}
@Override
public void add(AbstractFile file) {
System.out.println("不支持该方法");
}
@Override
public void remove(AbstractFile file) {
System.out.println("不支持该方法");
}
@Override
public AbstractFile getChild(int i) {
System.out.println("不支持该方法");
return null;
}
@Override
public void killvrius() {
System.out.println("视频2文件杀毒"+name);
}
}
public class client {
public static void main(String[] agrs) {
AbstractFile
file1,file2,file3,file4,folder1,folder2,folder3,folder4;
file1=new Folder("sunny的资料");
file2=new Folder("图像文件");
file3=new Folder("文本文件");
file4=new Folder("视频文件");
folder1=new Folder("图像文件");
folder2=new Folder("文本文件");
folder3=new Folder("视频文件");
folder4=new Folder("视频文件");
file1=new TextFile("软件体系结构与设计模式.txt");
file2=new ImageFile("图");
file3=new VideoFile("123.rmvb");
folder2.add(file1);
folder2.add(file2);
folder3.add(file3);
folder4.killvrius();
}
}
某信息咨询公司推出收费的在线商业信息查询模块,需要对查询用户进行身份验证,并记录查询日志,以便根据查询次数收取查询费用,现使用代理模式设计该系统。
public interface Searcher {
String DoSearch(String userid,String keyWord);
}
public class RealSearch implements Searcher{
public String DoSearch(String userid,String keyWord){
System.out.println(userid+keyWord+"查询");
return "查询到信息";
}
}
public class ProxySearcher implements Searcher{
private RealSearch realSearch =new RealSearch();
private AccessValidator validator;
private Logger logger;
public String DoSearch(String userid,String keyWord){
if(this.Validator(userid)){
String result =realSearch.DoSearch(userid,keyWord);
this.Log(userid);
return result;
}else{
return null;
}
}
public boolean Validator(String userid){
validator=new AccessValidator();
return validator.validate(userid);
}
public void Log(String userid) {
logger =new Logger();
logger.Log(userid);
}
}
public class Logger {
public void Log(String userid) {
}
public class Client{
public void Log(String userid){
System.out.println("数据更新用户"+userid+"查询此时加1");
}
}
}
public class AccessValidator {
public boolean validate(String userid){
if(userid.equals("邓玉爽")){
System.out.println("登陆成功!");
return true;
}else{
System.out.println("登录失败");
return false;
}
}
}
import com.sun.javaws.jnl.XMLUtils;
public class Client {
public static void main(String[] args){
Searcher searcher;
searcher = (Searcher)XMLUtil.getBean();
String result = searcher.DoSearch("dd","设计模式");
}
}
<?xml version="1.0"?>
<config>
<className>ProxySearcher</className>
</config>