`
learen
  • 浏览: 11254 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

黑马程序员 改进版交通管理系统

 
阅读更多

     ------- android培训java培训、期待与您交流! ----------

    通过观看张孝祥老师的视频,发现他把对灯的控制代码写到了灯的类里面,自认为不妥,于是进行代码分离,将控制代码分离到了灯的控制类里面,下面贴出灯的控制器代码

public class LampController {
	
	private ScheduledThreadPoolExecutor sch;
	private LinkedList<Lamp[]> groups;
	private Lamp[] current;
	
	public LampController() {
		
		this.groups = new LinkedList<Lamp[]>();
		sch = new ScheduledThreadPoolExecutor(1);
		init();
		this.current = nextGroup();
		changeGreen(current);
	}
	
	public void schedule(){
		
		// 每隔10s将当前灯变黑,下一个灯变亮
		sch.scheduleAtFixedRate(new Runnable() {

			@Override
			public void run() {
				changeRed(current);
				current = nextGroup();
				changeGreen(current);
			}

		}, 10, 10, TimeUnit.SECONDS);
	}

	private void init(){
		Lamp[] group1 = {Lamp.南向北,Lamp.北向南};
		Lamp[] group2 = {Lamp.南向西,Lamp.北向东};
		Lamp[] group3 = {Lamp.东向西,Lamp.西向东};
		Lamp[] group4 = {Lamp.东向南,Lamp.西向北};
		groups.add(group1);
		groups.add(group2);
		groups.add(group3);
		groups.add(group4);
	}
	
	private Lamp[] nextGroup(){
		Lamp[] group = groups.removeFirst();
		groups.addLast(group);
		return group;
	}
	
	private void changeGreen(Lamp[] lamps) {
		for(Lamp lamp : lamps)
			lamp.changeGreen();
	}
	
	private void changeRed(Lamp[] lamps) {
		for(Lamp lamp : lamps)
			lamp.changeRed();
	}

    这样灯类的代码得到简化,实现了单一性原则

public enum Lamp {
	南向北,北向南,
	南向西,北向东,
	东向西,西向东,
	东向南,西向北;
	
	private boolean flag;

	public boolean isLight() {
		return this.flag;
	}

	public void changeGreen() {
		this.flag = true;
		System.out.println(name() + "灯变绿");
	}
	
	public void changeRed() {
		this.flag = false;
		System.out.println(name() + "灯变红");
	}
}
    运行结果
南向北灯变绿
北向南灯变绿
北向南路线上的第1辆车通过
南向北路线上的第1辆车通过
北向南路线上的第2辆车通过
南向北灯变红
北向南灯变红
南向西灯变绿
北向东灯变绿
北向东路线上的第1辆车通过
南向西路线上的第1辆车通过
南向西路线上的第2辆车通过
南向西路线上的第3辆车通过
北向东路线上的第2辆车通过
南向西路线上的第4辆车通过
南向西灯变红
北向东灯变红
东向西灯变绿
西向东灯变绿
东向西路线上的第1辆车通过
西向东路线上的第1辆车通过
西向东路线上的第2辆车通过
东向西路线上的第2辆车通过
西向东路线上的第3辆车通过
西向东路线上的第4辆车通过
西向东路线上的第5辆车通过
东向西路线上的第3辆车通过
东向西路线上的第4辆车通过
东向西灯变红
西向东灯变红
东向南灯变绿
西向北灯变绿
东向南路线上的第1辆车通过
西向北路线上的第1辆车通过
西向北路线上的第2辆车通过
东向南路线上的第2辆车通过
西向北路线上的第3辆车通过
东向南路线上的第3辆车通过
东向南路线上的第4辆车通过
西向北路线上的第4辆车通过
东向南路线上的第5辆车通过
西向北路线上的第5辆车通过
东向南路线上的第6辆车通过
东向南路线上的第7辆车通过
东向南灯变红
西向北灯变红
南向北灯变绿
北向南灯变绿
南向北路线上的第2辆车通过
北向南路线上的第3辆车通过
南向北路线上的第3辆车通过
北向南路线上的第4辆车通过
南向北路线上的第4辆车通过
北向南路线上的第5辆车通过
南向北路线上的第5辆车通过
北向南路线上的第6辆车通过
南向北路线上的第6辆车通过
北向南路线上的第7辆车通过
南向北路线上的第7辆车通过
北向南路线上的第8辆车通过
南向北路线上的第8辆车通过
北向南路线上的第9辆车通过
北向南路线上的第10辆车通过
北向南路线上的第11辆车通过
北向南路线上的第12辆车通过
南向北灯变红
北向南灯变红
南向西灯变绿
北向东灯变绿
南向西路线上的第5辆车通过
北向东路线上的第3辆车通过
南向西路线上的第6辆车通过
北向东路线上的第4辆车通过
南向西路线上的第7辆车通过
北向东路线上的第5辆车通过
南向西路线上的第8辆车通过
北向东路线上的第6辆车通过
北向东路线上的第7辆车通过
南向西路线上的第9辆车通过
南向西路线上的第10辆车通过
南向西路线上的第11辆车通过
南向西路线上的第12辆车通过
南向西路线上的第13辆车通过
北向东路线上的第8辆车通过
南向西灯变红
北向东灯变红
东向西灯变绿
西向东灯变绿
西向东路线上的第6辆车通过
东向西路线上的第5辆车通过
东向西路线上的第6辆车通过
西向东路线上的第7辆车通过
东向西路线上的第7辆车通过
西向东路线上的第8辆车通过
东向西路线上的第8辆车通过
西向东路线上的第9辆车通过
东向西路线上的第9辆车通过
西向东路线上的第10辆车通过
 
分享到:
评论

相关推荐

    黑马程序员struts2人员管理系统

    《黑马程序员Struts2人员管理系统详解》 在Java Web开发领域,Struts2框架作为一款强大的MVC(Model-View-Controller)框架,被广泛应用于构建企业级应用。本项目“黑马程序员Struts2人员管理系统”是专为学习...

    C++黑马程序员学习资料

    C++黑马程序员学习资料,附赠《InterviewGuide第四版By阿秀》、《LeetCode刷题手册》、《背包问题九讲》、《算法图解》pdf版本,三个基础课程文档手册及三个实验项目,由简到繁分别为《通讯录管理系统》、《职工管理...

    黑马程序员Javase笔记

    Java是世界上最流行的编程语言之一,尤其在...总结来说,"黑马程序员Javase笔记"涵盖了Java的基础语法、内存管理、面向对象编程、集合框架以及泛型和Map等内容,这些都是成为一名合格Java开发者必须掌握的核心知识。

    黑马程序员JavaEE49期

    黑马程序员JavaEE49期

    黑马程序员毕业设计资料,代码,数据库设计论文等

    "黑马程序员网上图书商城中的毕业设计资料,代码,数据库设计论文等" 描述进一步细化了这些资源的来源——黑马程序员的网上图书商城,暗示这可能是一个基于在线书店的系统设计项目。资源不仅限于理论知识,还有实际...

    教材源码_javaweb_黑马程序员Javaweb源码_

    黑马程序员是一家知名的IT教育机构,他们提供的Javaweb教材源码是为了帮助学员深入理解和实践Web开发技术。下面将详细介绍JavaWeb的基本概念、核心技术和黑马程序员源码在学习过程中的作用。 1. **JavaWeb基础** ...

    python黑马程序员名片管理系统

    在本项目中,"python黑马程序员名片管理系统"是一个基于Python编程语言实现的系统,用于管理和存储个人或组织的名片信息。这个系统展示了Python基础编程以及数据管理的基本概念,非常适合初学者学习。通过"第六章"的...

    黑马程序员 C语言提高课程配套课件

    黑马程序员 C语言提高课程配套课件 黑马程序员 C语言提高课程配套课件

    黑马程序员测试题部分答案

    “黑马”则表明这份资料与“黑马程序员”这个教育品牌相关,意味着其内容可能涵盖了该机构课程中的知识点,具有一定的权威性和系统性。 【压缩包子文件的文件名称列表】:“itheima”可能是一个文件夹名称,通常在...

    黑马程序员——Android移动开发源码

    黑马程序员——Android移动开发源码

    黑马程序员,C++核心编程

    黑马程序员,C++核心编程

    JavaEE_MVC图书馆管理系统

    【JavaEE_MVC图书馆管理系统】是一个使用JavaEE技术栈,基于MVC(Model-View-Controller)设计模式开发的图书管理应用。系统的核心目标是实现对图书馆资源的有效管理和用户服务,包括图书的入库、出库、借阅、归还、...

    B站黑马程序员Python教程学习笔记.zip

    在B站黑马程序员的Python教程中,你将深入理解Python的基础概念,包括: 1. **变量与数据类型**:Python支持多种数据类型,如整型(int)、浮点型(float)、字符串(str)和布尔型(bool)。此外,还有列表(list...

    传智播客旗下黑马程序员c++视频课程内部讲义

    传智播客旗下黑马程序员c++视频课程内部讲义 就是上课时老师翻阅的那个讲义

    黑马程序员 大事件案例程序

    layui ajax 没有node.js功能都可用,高度类似。 黑马刘龙彬老师主讲的大事件项目,整体看完,给...最后,再次给黑马程序员和刘老师点个赞。 说明--ShowDoc https://www.showdoc.com.cn/escook?page_id=3707158761215217

    黑马程序员ssm代码分享

    内容概要:通过带着读者手写简化版 Spring 框架了解 Spring 核心原理。在手写Spring源码的过程中会摘取整体框架中的核心逻辑,简化代码实现过程保留核心功能, ...本代码基于黑马程序员的课程,最好根据课程同步学习

    黑马程序员匠心之作 C++教程_第2阶段实战-通讯录管理讲义.rar

    《黑马程序员匠心之作 C++教程_第2阶段实战-通讯录管理讲义》是一份针对C++初学者精心编写的教学材料,旨在帮助学习者掌握C++编程语言的基础知识,并通过实际的通讯录管理系统项目来提升编程技能。这份讲义以简洁...

    黑马_Springboot的物业管理系统

    《黑马_Springboot的物业管理系统》是一篇详细探讨如何利用Spring Boot框架构建高效、智能的物业管理系统的论文。本文将深入剖析Spring Boot的核心特性,并结合实际物业管理业务场景,阐述如何运用Java技术栈构建这...

    黑马程序员JAVA WEB全笔记pdf

    本笔记基于黑马程序员的课程内容,全面覆盖了Java Web的基础知识,包括前端开发技术如HTML、CSS、JavaScript,以及后端服务器端的Java Servlet和JSP(Java Server Pages)。 一、前端基础 1. ...

    黑马程序员Vue深入浅出视频代码

    这是根据黑马程序员中关于Vue11天课程中,跟着视频编写的代码,一行行跟着写出来的,连备注基本也是和视频一样,用的是vscode开发工具,上传的资料已经把node_modules删除了,进入目录后,用cnpm i重新安装一下就...

Global site tag (gtag.js) - Google Analytics