板上黑板上画圆:
public Round{
private int x;//圆心
private int y;//半径public void draw(){
System.out.println("画圆");
}
}
球从一个绳子的一端移到了另一端:
首先分析有俩对象:绳子和球。
class Rope{
private Point start;//起始坐标。
private point end;//结束坐标。
public Rope(Point start,point end){
this.start=start;
this.end=end;
}
public Point nextPoint(Point currentPoint){
通过两点一线的数学公式可以计算出当前点的下一个点,
如果当前点是终止点,则返回null,如果当前点不是线上点,则抛出异常。
}
}
class Ball{
private Rope rope;
private Point currentPoin;
public Ball(Rope rope,startPoint){
this.rope=rope;
this.currentPoin=startPoint;
}
public void move(){
currentPoin=reope.nextPoint(currentPoin);
System.out.println("小球移到了"+currentPoint);
}
}
有两快石头磨成一把石刀,石刀可以砍树,砍成木材,木材做出椅子:
stoneKnife=KnifeFcatory.createKnife(stone first,stone second);//石头加工厂,把石头参数传入进去,
加工后,返回一把石刀。
stone//石头
stoneKnife//石头磨成石刀。
material=stoneKnife.cut(tree);石刀有一个砍树的方法,传入参数tree,则反会以堆木材。
tree//树
chair=ChairFactory.makeChair(material); 椅子有一个把木材加工成椅子的方法,返回椅子
material//木材
chair//椅子
从交通分析需求提取出3个对象,灯,路(包含车辆),主体交通灯控制器。在分析这个十字路口有多少条路
从图中分析出总共12条路,南北东西直线路,4条线,加上每条路的右拐路线和左路线8条线,每条线的右拐不受绿灯控制,但是在代码实现时得用一个绿灯标示!
Road(路)类的设计:定义一个集合用来存放车辆,定义一个路线名,提供2个线程池,第一个线程是不断创造车辆放入集合,另一个线程池是不断检测路灯的变化,如果为绿则从集合中减少车辆!
package com.isoftstone.interview.traffic;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
* 每个Road对象代表一条路线,总共12条路线,即系统总共要产生12个Road对象。 每条路线上随机增加新的车辆,增加到一个集合中保存。
* 每条路线每隔一秒都会检查控制本路线的灯是否为绿,是则将本路线保存车的集合中的第一辆车移除,即表示车穿过了路口。
*
* @author Administrator
*
*/
public class Road {
// 定义个车辆的容器
private List<String> vechicles = new ArrayList<String>();
// 定义路线名
private String name = null;
// 通过构造方法不断创造车辆,模拟车辆不断随机上路的过程
public Road(String name) {
this.name = name;
ExecutorService pool = Executors.newSingleThreadExecutor();
pool.execute(new Runnable() {
public void run() {
// 通过循环不断产生随机车辆
for (int i = 1; i < 1000; i++) {
try {
Thread.sleep((new Random().nextInt(10) + 1) * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
vechicles.add(Road.this.name + "_" + i);
}
}
});
//每隔一秒检查对应的灯是否为绿,是则放行一辆车
ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
timer.scheduleAtFixedRate(new Runnable() {
public void run() {
if (vechicles.size() > 0) {
boolean ligthed =Lamp.valueOf(Road.this.name).isLighted();
if (ligthed) {
System.out.println(vechicles.remove(0)+ " is traversing");
}
}
}
},
1,
1,
TimeUnit.SECONDS);
}
}
lamp(路灯)类的设计:定义一个自己灯的状态、定义一个对应灯的状态,定义一个下一个灯的状态。
对外提供俩方法light()它主要是在某个灯变绿时,把它对应方向的灯的状态也变绿。
blackOut():它主要是在某个灯变红时,对应方向的灯也变红,并且返回下一个灯状态为绿。
package com.isoftstone.interview.traffic;
/**
* 每个Lamp元素代表一个方向上的灯,总共有12个方向,所有总共有12个Lamp元素。
* @author Administrator
*
*/
public enum Lamp {
/*每个枚举元素各表示一个方向的控制灯*/
S2N("N2S","S2W",false),S2W("N2E","E2W",false),E2W("W2E","E2S",false),E2S("W2N","S2N",false),
/*下面元素表示与上面的元素的相反方向的灯,它们的“相反方向灯”和“下一个灯”应忽略不计!*/
N2S(null,null,false),N2E(null,null,false),W2E(null,null,false),W2N(null,null,false),
/*由南向东和由西向北等右拐弯的灯不受红绿灯的控制,所以,可以假想它们总是绿灯*/
S2E(null,null,true),E2N(null,null,true),N2W(null,null,true),W2S(null,null,true);
private Lamp(String opposite,String next,boolean lighted){
this.opposite=opposite;
this.next=next;
this.lighted=lighted;
}
private boolean lighted;
private String opposite;
private String next;
public boolean isLighted(){
return lighted;
}
public void light(){
this.lighted=true;
if(opposite!=null){
Lamp.valueOf(opposite).light();
}
System.out.println(name() + " lamp is green,下面总共应该有6个方向能看到汽车穿过!");
}
public Lamp blackOut(){
this.lighted = false;
if(opposite != null){
Lamp.valueOf(opposite).blackOut();
}
Lamp nextLamp= null;
if(next != null){
nextLamp = Lamp.valueOf(next);
System.out.println("绿灯从" + name() + "-------->切换为" + next);
nextLamp.light();
}
return nextLamp;
}
}
LampController(路灯的控制器):定义一个变量,当前灯。当控制器启动时,当前灯为绿。然后定义一个定时器,每隔一段时间改变灯状态。
package com.isoftstone.interview.traffic;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class LampController {
private Lamp currentLamp;
public LampController(){
//刚开始由南向北的灯变绿
currentLamp=Lamp.S2N;
currentLamp.light();
//每隔10秒将当前绿灯变成红灯,并让下一个方向的灯变绿
ScheduledExecutorService timer=Executors.newScheduledThreadPool(1);
timer.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
System.out.println("来了");
currentLamp=currentLamp.blackOut();
}
},
10,
10,
TimeUnit.SECONDS);
}
}
模拟汽车上路的测试类:
package com.isoftstone.interview.traffic;
public class MainClass {
public static void main(String[] args) {
/*产生12个方向的路线*/
String [] directions = new String[]{
"S2N","S2W","E2W","E2S","N2S","N2E","W2E","W2N","S2E","E2N","N2W","W2S"
};
for(int i=0;i<directions.length;i++){
new Road(directions[i]);
}
//产生整个交通系统
new LampController();
}
}
----------------------android培训、java培训、期待与您交流! ------------------
详细请查看:详细请查看:http://edu.csdn.net/heima