java作业——代理模式和异常处理
假设教学过程需要任课教师和助教参与,教师的教学工作是上课,助教的教学工作是批改作业和收作业,完成的教学过程包括:助教先批改完所有的作业任课教师才会上课,上完课后助教要收取所有学生的作业。具体要求:
1、用代理模式实现(参考书上上网的例子),提示:定义一个教师接口(里面包含一个上课的抽象方法),任课教师实现该接口,模拟上课,助教是代理,也实现上课这个方法,但同时要扩展批改作业和收取作业这两个方法。
2、设计两个异常类,一个是助教未批改完作业,则抛出未批改作业异常,任课教师停止上课;一个是收取作业时,如果有未交作业的同学,则抛出未交作业异常。
本代码没有使用代理工厂类,直接由助教代理实现的。废话较多,看看就好~
package Teaching_process;
//教学的接口,具体操作由Teacher类实现
public interface T_USB {
public void teach_menthod();//定义抽象的教学方法
}
package Teaching_process;
//任课教师实现T_USB接口,模拟上课
public class Teacher implements T_USB{
//具体实现教学方法
public void teach_menthod()
{
System.out.println("教师:认真上课ing");
}
}
package Teaching_process;
import java.util.Scanner;
//助教代理上课,实现上课,并扩展收发作业功能
public class Assistant implements T_USB{
private T_USB t_USB;
public Assistant(T_USB t_USB)
{
this.t_USB=t_USB;
}
Scanner input=new Scanner(System.in);
//代理上课,实现上课功能
public void teach_menthod() {
System.out.println("我是助教,我辅助上课");
int n;
System.out.println("教师:作业改完了?\n(1)改完了 (2)没改完");
n=input.nextInt();
int fg;//判断老师是否会上课
fg=Correcting_work(n);
if(fg==1)
{
t_USB.teach_menthod();//教师上课
Retracting_work();
}
else
{
System.out.println("教师:我不上了...\n\n");
}
}
//批改作业
public int Correcting_work(int n)
{
try
{
if(n==1)
{
System.out.println("助教:批改完毕,可以上课");
return 1;
}
else
{
throw new MyException("\n助教:还没改完,让我先改改");
}
}
catch(MyException e)
{
System.out.println(e);
return 0;
}
}
//收作业
public void Retracting_work()
{
System.out.println("助教:课上完了,把作业交上来");
int n;
System.out.println("(1)收齐了 (2)没收齐");
n=input.nextInt();
try {
if(n==1) System.out.println("收齐了,下课\n\n");
else
{
throw new MyException("\n没收齐,拖堂十分钟\n\n");
}
}catch(MyException e)
{
System.out.println(e);
}
}
}
package Teaching_process;
//测试类
public class Text {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Assistant cs1=new Assistant(new Teacher());
while(true)
{
cs1.teach_menthod();
}
}
}
package Teaching_process;
public class MyException extends Exception {
public MyException(String s)
{
super(s);
}
}