设计类图:
抽象控制杆类:
public abstract class AbstractLever {
protected int lever = 1;
protected int maxlever = 0;
public AbstractLever()
{
lever = 1;
}
public int getMaxLever()
{
return maxlever;
}
public void setMaxLever(int maxlever)
{
this.maxlever = maxlever;
}
public AbstractLever(int maxlever)
{
this.setMaxLever(maxlever);
}
public abstract int getLever();
public abstract int leverUp();
public abstract int leverDown();
}
抽象刻度盘类:
public abstract class AbstractDial {
protected int dial = 1;
protected int maxDial = 1;
public AbstractDial()
{
dial = 1;
}
public AbstractDial(int maxDial)
{
setMaxDial(maxDial);
}
public int getMaxDial()
{
return maxDial;
}
public void setMaxDial(int maxDial)
{
this.maxDial = maxDial;
}
public abstract int getDial();
public abstract int dialUp();
public abstract int dialDown();
}
抽象雨刷类:
public abstract class AbstractBrush {
protected int speed = 0;
public AbstractBrush(int speed)
{
this.speed = speed;
}
public AbstractBrush()
{
this.speed = 0;
}
public abstract int getSpeed();
public abstract void setSpeed(int speed);
}
抽象中介类:
public abstract class AbstractAgent {
protected AbstractLever l;
protected AbstractDial d;
protected AbstractBrush b;
public AbstractAgent()
{
}
public AbstractAgent(AbstractLever l,AbstractDial d,AbstractBrush b)
{
this.l = l;
this.d = d;
this.b = b;
}
public int getLever()
{
return l.getLever();
}
public int getDial()
{
return d.getDial();
}
public abstract void doSpeed();
public abstract void show();
}
控制杆类:
public class Lever extends AbstractLever{
public Lever()
{
super();
}
public Lever(int maxlever)
{
super(maxlever);
}
public int getLever()
{
return lever;
}
public int leverUp()
{
if(lever < maxlever)
lever++;
return lever;
}
public int leverDown()
{
if(lever > 1)
lever --;
return lever;
}
}
刻度盘类:
public class Dial extends AbstractDial{
public Dial()
{
super();
}
public Dial(int dial)
{
super(dial);
}
public int getDial()
{
return dial;
}
public int dialUp()
{
if(dial < maxDial)
dial++;
return dial;
}
public int dialDown()
{
if(dial > 1)
dial --;
return dial;
}
}
雨刷类:
public class Brush extends AbstractBrush{
public Brush()
{
super();
}
public Brush(int speed)
{
super(speed);
}
public int getSpeed()
{
return speed;
}
public void setSpeed(int speed)
{
this.speed = speed;
}
}
第二种雨刷的中介类:
public class AgentNew extends AbstractAgent{
public AgentNew()
{
super();
}
public AgentNew(AbstractLever l,AbstractDial d,AbstractBrush b)
{
super(l,d,b);
}
public void doSpeed()
{
int speed = 0;
switch(getLever())
{
case 1:speed = 0;break;
case 2:
switch(getDial())
{
case 1: speed = 4;break;
case 2: speed = 6;break;
case 3: speed = 12;break;
case 4: speed = 18;break;
}
break;
case 3: speed = 30;break;
case 4: speed = 60;break;
case 5: speed = 90;break;
}
b.setSpeed(speed);
}
public void show()
{
String slever = "";
switch(getLever())
{
case 1: slever = "停止";break;
case 2: slever = "间歇";break;
case 3: slever = "低速";break;
case 4: slever = "高速";break;
case 5: slever = "超高速";break;
}
System.out.println("控制杆的档位为:" + slever );
System.out.println("刻度盘的刻度为:" + getDial());
System.out.println("雨刷的速度为:" + b.getSpeed());
}
}
Client类:
import java.util.Scanner;
public class Brush_Test {
public static void menu() {
System.out.println("==================Please choose operation============");
System.out.println("\t==========1:Lever Up===========");
System.out.println("\t==========2:Lever Down=========");
System.out.println("\t==========3:Dial Up============");
System.out.println("\t==========4:Dial Down==========");
System.out.println("\t==========0:Quit===============");
System.out.println("=====================================================");
System.out.println("Input the number(0~4):");
}
/**
* @param args
*/
public static void main(String[] args)
{
//第一种雨刷尝试
//AbstractAgent agent = new Agent();
//agent.l = new Lever(4);
//agent.d = new Dial(3);
//agent.b = new Brush();
//第二种雨刷尝试
AbstractAgent agent = new AgentNew();
agent.l = new Lever(5);
agent.d = new Dial(4);
agent.b = new Brush();
Scanner input = new Scanner(System.in);
int choice = 0;
menu();
try{
while(true)
{
choice = input.nextInt();
if(choice == 0)
break;
switch(choice)
{
case 1:
if(agent.getLever() >= agent.l.getMaxLever())
{
System.out.println("控制杆已经处于高速档位,不能再升档!");
menu();
continue;
}
else
{
agent.l.leverUp();
}
break;
case 2:
if(agent.getLever() <= 1)
{
System.out.println("控制杆已经处于停止档位,不能再降档!");
menu();
continue;
}
else
{
agent.l.leverDown();
}
break;
case 3:
if(agent.getDial() >= agent.d.getMaxDial())
{
System.out.println("刻度盘已经处于最高刻度,不能再升档!");
menu();
continue;
}
else
{
agent.d.dialUp();
}
break;
case 4:
if(agent.getDial() <= 1)
{
System.out.println("刻度盘已经处于最低刻度,不能再降档!");
menu();
continue;
}
else
{
agent.d.dialDown();
}
break;
default:
System.out.println("请输入数字0~4");
menu();
continue;
} //switch
agent.doSpeed();
agent.show();
menu();
} //while
}finally{
input.close();
}
}
}