java實(shí)現(xiàn)模擬USB接口的功能
1 題目
模擬USB接口的功能
我們?cè)谑褂糜?jì)算機(jī)的時(shí)候經(jīng)常會(huì)用到USB接口,鼠標(biāo)、鍵盤(pán)等都是帶USB接口的設(shè)備,我們只需要將鼠標(biāo)、鍵盤(pán)插入到計(jì)算機(jī)的USB接口中就能正常使用這些帶USB接口的外設(shè)。
通過(guò)JAVA程序的面向接口編程的設(shè)計(jì)思想,模擬計(jì)算機(jī)使用USB接口驅(qū)動(dòng)鼠標(biāo)和鍵盤(pán)的過(guò)程。
要求:
① 定義USB接口,接口中有turnOn()啟動(dòng)USB設(shè)備的方法,和turnOff()關(guān)閉設(shè)備的方法;
②定義Mouse鼠標(biāo)、KeyBoard鍵盤(pán)、MicroPhone麥克風(fēng)類(lèi)實(shí)現(xiàn)USB接口;
③定義計(jì)算機(jī)Computer類(lèi)
powerOn()開(kāi)機(jī),開(kāi)機(jī)前需要加載所有的USB設(shè)備;
powerOff()關(guān)機(jī),關(guān)機(jī)前需要彈出所有的USB設(shè)備。
注意:開(kāi)機(jī)的時(shí)候鼠標(biāo)等設(shè)備可以沒(méi)有插進(jìn)去
2 思路分析
2.1 寫(xiě)一個(gè)接口USB,里面有turnOn方法和turnOff方法
2.2 寫(xiě)Mouse(鼠標(biāo))、KeyBoard(鍵盤(pán))、MicroPhone(麥克風(fēng))類(lèi)實(shí)現(xiàn)USB接口
2.3 重寫(xiě)turnOn和turnOff需要打印相應(yīng)的對(duì)象信息
2.4 Computer類(lèi)建立一個(gè)接口數(shù)組,用來(lái)存放每個(gè)實(shí)現(xiàn)接口的的子類(lèi)的實(shí)例化對(duì)象
2.5 Computer類(lèi)中創(chuàng)建一個(gè)單次添加設(shè)備方法addUSB(USB usb),使得每次調(diào)用該方法時(shí),該電腦會(huì)在接口數(shù)組對(duì)象不為null的位置插上一個(gè)設(shè)備
2.6 Computer中的powerOn是遍歷完所有的USB接口,若接口對(duì)象不為null,就調(diào)用該設(shè)備的重寫(xiě)的turnOn方法,當(dāng)遍歷完所有的后會(huì)打印電腦啟動(dòng)成功。
2.7 Computer中的powerOff是遍歷完所有的USB接口,若接口對(duì)象不為null,則調(diào)用該設(shè)備的被重寫(xiě)的turnOff方法,然后把該接口對(duì)象賦值為null,當(dāng)遍歷完成所有的后會(huì)打印電腦關(guān)閉成功。
2.8 如果開(kāi)機(jī)前和關(guān)機(jī)前都沒(méi)有設(shè)備需要加載或彈出的話,會(huì)輸出開(kāi)機(jī)前沒(méi)有需要加載的設(shè)備或關(guān)機(jī)前沒(méi)有需要彈出的設(shè)備
3 代碼實(shí)現(xiàn)
USB 接口
package Work4; public interface USB { //接口里面的方法都是抽象方法,那個(gè)public abstract可以省略不寫(xiě)的!!! void turnOn(); void turnOff(); }
KeyBoard類(lèi)
package Work4; public class KeyBoard implements USB{ ? ? private String name; ? ? public KeyBoard() { ? ? } ? ? public KeyBoard(String name) { ? ? ? ? this.name = name; ? ? } ? ? public String getName() { ? ? ? ? return name; ? ? } ? ? public void setName(String name) { ? ? ? ? this.name = name; ? ? } ? ? @Override ? ? public void turnOn() { ? ? ? ? System.out.println(name+"鍵盤(pán)加載了"); ? ? } ? ? @Override ? ? public void turnOff() { ? ? ? ? System.out.println(name+"鍵盤(pán)彈出了"); ? ? } }
MicroPhone類(lèi)
package Work4; public class MicroPhone implements USB{ ? ? private String name; ? ? public MicroPhone() { ? ? } ? ? public MicroPhone(String name) { ? ? ? ? this.name = name; ? ? } ? ? public String getName() { ? ? ? ? return name; ? ? } ? ? public void setName(String name) { ? ? ? ? this.name = name; ? ? } ? ? @Override ? ? public void turnOn() { ? ? ? ? System.out.println(name+"麥克風(fēng)加載了"); ? ? } ? ? @Override ? ? public void turnOff() { ? ? ? ? System.out.println(name+"麥克風(fēng)彈出了"); ? ? } }
Mouse類(lèi)
package Work4; public class Mouse implements USB{ ? ? private String name; ? ? public Mouse() { ? ? } ? ? public Mouse(String name) { ? ? ? ? this.name = name; ? ? } ? ? public String getName() { ? ? ? ? return name; ? ? } ? ? public void setName(String name) { ? ? ? ? this.name = name; ? ? } ? ? @Override ? ? public void turnOn() { ? ? ? ? System.out.println(name+"鼠標(biāo)加載了"); ? ? } ? ? @Override ? ? public void turnOff() { ? ? ? ? System.out.println(name+"鼠標(biāo)彈出了"); ? ? } }
Computer類(lèi)
package Work4; public class Computer { ? ? //弄一個(gè)USB接口,里面的默認(rèn)都為null ? ? private USB[] usbs=new USB[4]; ? ? public Computer() { ? ? } ? ? //每次只能增加一個(gè)設(shè)備 ? ? public void addUSB(USB usb){ ? ? ? ? for (int i = 0; i <usbs.length; i++) { ? ? ? ? ? ? //如果為空,則代表可以插入設(shè)備,否則就插入不了的 ? ? ? ? ? ? if(usbs[i]==null){ ? ? ? ? ? ? ? ? usbs[i]=usb; ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? } ? ? ? ? } ? ? } ? ? public void powerOn(){ ? ? ? ? boolean flag=false; ? ? ? ? //判斷是否插入了設(shè)備,只要有就為false ? ? ? ? for (int i = 0; i <usbs.length; i++) { ? ? ? ? ? ? if(usbs[i]!=null){ ? ? ? ? ? ? ? ? //如果USB接口不為空,則代表有設(shè)備,需要啟動(dòng)的 ? ? ? ? ? ? ? ? usbs[i].turnOn(); ? ? ? ? ? ? ? ? flag=true; ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? if(!flag){ ? ? ? ? ? ? System.out.println("開(kāi)機(jī)前沒(méi)有需要加載的設(shè)備"); ? ? ? ? } ? ? ? ? ? ? System.out.println("開(kāi)機(jī)成功!!!!"); ? ? } ? ? public void powerOff(){ ? ? ? ? boolean flag=false; ? ? ? ? //判斷是否還有設(shè)備沒(méi)有設(shè)備被彈出,只要有就為false ? ? ? ? for (int i = 0; i <usbs.length; i++) { ? ? ? ? ? ? if(usbs[i]!=null){ ? ? ? ? ? ? ? ? //如果USB接口不為空,則代表有設(shè)備,關(guān)機(jī)前需要彈出這些設(shè)備的 ? ? ? ? ? ? ? ? usbs[i].turnOff(); ? ? ? ? ? ? ? ? usbs[i]=null; ? ? ? ? ? ? ? ? flag=true; ? ? ? ? ? ? ? ? //彈出設(shè)備后,對(duì)應(yīng)的接口上面就沒(méi)有東西了,理應(yīng)設(shè)置為null ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? if(!flag){ ? ? ? ? ? ? System.out.println("關(guān)機(jī)前沒(méi)有需要彈出的設(shè)備"); ? ? ? ? } ? ? ? ? ? ? System.out.println("關(guān)機(jī)成功!!!!"); ? ? } }
TestComputer
package Work4; public class TestComputer { ? ? public static void main(String[] args) { ? ? ? ? Computer c=new Computer(); ? ? ? ? c.addUSB(new Mouse("羅技")); ? ? ? ? c.addUSB(new KeyBoard("雙飛燕")); ? ? ? ? c.addUSB(new MicroPhone("鐵三角")); ? ? ? ? c.powerOn(); ? ? ? ? c.powerOff(); ? ? ? ? //沒(méi)有插入設(shè)備時(shí)測(cè)試 ? ? ? ? c.powerOn(); ? ? ? ? c.powerOff(); ? ? } }
4 代碼運(yùn)行截圖
到此這篇關(guān)于java實(shí)現(xiàn)模擬USB接口的功能的文章就介紹到這了,更多相關(guān)java 模擬USB接口內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
RocketMQ?Broker實(shí)現(xiàn)高可用高并發(fā)的消息中轉(zhuǎn)服務(wù)
RocketMQ消息代理(Broker)是一種高可用、高并發(fā)的消息中轉(zhuǎn)服務(wù),能夠接收并存儲(chǔ)生產(chǎn)者發(fā)送的消息,并將消息發(fā)送給消費(fèi)者。它具有多種消息存儲(chǔ)模式和消息傳遞模式,支持水平擴(kuò)展和故障轉(zhuǎn)移等特性,可以為分布式應(yīng)用提供可靠的消息傳遞服務(wù)2023-04-04Gradle build 報(bào)錯(cuò):Received status code 400 from server
這篇文章主要介紹了Gradle build 報(bào)錯(cuò):Received status code 400 from server,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07詳解基于Spring Cloud幾行配置完成單點(diǎn)登錄開(kāi)發(fā)
這篇文章主要介紹了詳解基于Spring Cloud幾行配置完成單點(diǎn)登錄開(kāi)發(fā),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-02-02基于Freemarker和xml實(shí)現(xiàn)Java導(dǎo)出word
這篇文章主要介紹了基于Freemarker和xml實(shí)現(xiàn)Java導(dǎo)出word,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04SpringCloud客戶端報(bào)錯(cuò):- was unable to send&nb
這篇文章主要介紹了SpringCloud客戶端報(bào)錯(cuò):- was unable to send heartbeat!的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05SpringBoot實(shí)現(xiàn)quartz定時(shí)任務(wù)可視化管理功能
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)quartz定時(shí)任務(wù)可視化管理功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08