组合模式、代理模式

使用组合模式设计一个杀毒软件框架,该软件既可以对一个文件夹杀毒,也可以对一个文件杀毒,文件种类包括文本文件、图片文件、视频文件。绘制类图并编程实现。
在这里插入图片描述

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>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_54152049

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值