Java设计模式作业-访问者模式

本文介绍了一款使用访问者模式设计的源代码解析工具,它能统计代码规模、检查命名规范并计算行数。通过Visitor、Element和Code类,配合SizeVisitor、TypeVisitor和CalcVisitor实现不同功能。
摘要由CSDN通过智能技术生成

某软件公司需要设计一个源代码解析工具,该工具可以对源代码进行解析和处理,在该工具的初始版本中,主要提供了以下 3 个功能。所有代码和接口均在一个package内。

目录

作业内容

一、UML图

二、代码

1.Visitor类

2.Element接口

3.Code类

4.SizeVisitor类

5.TypeVisitor类

6.CalcVisitor类

7.Test类


作业内容

某软件公司需要设计一个源代码解析工具,该工具可以对源代码进行解析和处理,在该工具的初始版本中,主要提供了以下 3 个功能。
(1) 度量软件规模。可以统计源代码中类的个数、每个类属性的个数以及每个类方法的个数等。
(2) 提取标识符名称,以便检查命名是否合法和规范。可以提取类名、属性名和方法名等。
(3) 统计代码行数。可以统计源代码中每个类和每个方法中源代码的行数。
将来还会在工具中增加一些新功能,为源代码中的类、属性和方法等提供更多的解析操
作。现采用访问者模式设计该源代码解析工具,可将源代码中的类、属性和方法等设计为待
访问的元素,上述不同功能由不同的具体访问者类实现,绘制对应的类图并编程模拟实现

一、UML图

 

二、代码

1.Visitor类

public abstract class Vistor {
    public abstract void visit(Code code);
}

2.Element接口

public interface Element {
    public abstract void accept(Vistor v);
}

3.Code类

public class Code implements Element{
    private String name;
    public Code(String name){
        this.name = name;
    }
    public String getName(){
        return this.name;
    }
    @Override
    public void accept(Vistor v) {
        v.visit(this);
    }
}

4.SizeVisitor类

public class SizeVisitor extends Vistor{
    @Override
    public void visit(Code code) {
        System.out.println(code.getName() + "调用了度量软件规模方法");
    }
}

5.TypeVisitor类

public class TypeVisitor extends Vistor{
    @Override
    public void visit(Code code) {
        System.out.println(code.getName()+"调用了提取标识符名称方法");
    }
}

6.CalcVisitor类

public class CalcVisitor extends Vistor{
    @Override
    public void visit(Code code) {
        System.out.println(code.getName()+"调用了统计代码行数方法");
    }
}

7.Test类

public class Test {
    public static void main(String[] args) {
        SizeVisitor sizeVisitor = new SizeVisitor();
        CalcVisitor calcVisitor = new CalcVisitor();
        TypeVisitor typeVisitor = new TypeVisitor();

        Code code1 = new Code("代码1");
        Code code2 = new Code("代码2");

        System.out.println("代码1调用方法");
        code1.accept(sizeVisitor);
        code1.accept(calcVisitor);
        code1.accept(typeVisitor);

        System.out.println("代码2调用方法");
        code2.accept(sizeVisitor);
        code2.accept(calcVisitor);
        code2.accept(typeVisitor);
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值