企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# Java面向对象(综合实战) ​    前言:学习完Java面向对象,所以对于不太了解的地方就得从实战一些小项目练习获得需要知道的东西,从这些练习中就能更加直观清晰的明白和使用。 ### 案例一:电脑模型(OO实现) #### 1.1 需求分析 ​   一个可以运行的电脑核心就是电脑主板,而电脑主板的核心部分包括:CPU插槽(AMD的CPU或者Intel的CPU)、声卡、显卡、网卡都符合PCI的插槽标准所以可以插到PCI插槽中 类: >电脑类(Computer) >主板类(MainCard) 接口: >CPU接口 >PCI接口 基于CPU接口的实现:AMPCPU或者InterCPU 声卡:华硕(ASUSSoundCard)声卡 显卡:七彩虹(ColorFulCard) 网卡:TPLinkNetWorkCard 组件关键分析: 电脑有一个属性-主板类 主板 属性1个(CPU接口)和3个PCI接口 #### 1.2 代码实现 ​   对于电脑主板上的CPU和PCI插槽为满足不同品牌的设备,分别定义CPU接口和PCI接口,例如: ```java /** * CPU.java(CPU插槽接口) * @author baishenghua * * */ public interface CPU { // CPU工作 public void work(); } ``` ​   **PCI接口代码:** ```java /** * PCI.java(主板上PCI插槽标准接口) * @author baishenghua * * */ public interface PCI { public void run(); } ``` ​   对于主板上的CPU定义为接口,但对应的实现可以是AMD的CPU也可以是Intel的CPU,例如: ​   **AMD的CPU代码:** ```java /** * AMDCPU.java(AMDCPU类) * @author baishenghua * */ public class AMDCPU implements CPU { @Override public void work() { System.out.println("====AMDCPU开始工作====="); } } ``` ​   **Intel的CPU代码:** ```java /** * IntelCPU.java(Intel的CPU类) * @author baishenghua * */ public class IntelCPU implements CPU { @Override public void work() { System.out.println("====IntelCPU开始工作======"); } } ``` ​   对于电脑主板上的三个PCI插槽可以匹配声卡、显卡、网卡,在这里我们对应的实现分别为华硕声卡(ASUSSoundCard)、七彩虹显卡(ColorFulCard)、 Tp-Link网卡(TPLinkNetWorkCard),代码如下: ​   **华硕声卡(ASUSSoundCard)代码:** ```java /** * ASUSSoundCard.java(华硕声卡类) * @author baishenghua * */ public class ASUSSoundCard implements PCI { @Override public void run() { System.out.println("====华硕声卡开始运行====="); } } ``` ​   **七彩虹显卡(ColorFulCard)代码** ```java /** * ColorFulCard.java(七彩虹显卡) * @author baishenghua * */ public class ColorFulCard implements PCI { @Override public void run() { System.out.println("======七彩虹显卡开始运行====="); } } ``` ​   **Tp-Link网卡(TPLinkNetWorkCard)代码** ```java /** * TPLinkNetWorkCard.java(Tp-Link网卡类) * @author baishenghua * */ public class TPLinkNetWorkCard implements PCI { @Override public void run() { System.out.println("====Tp-Link网卡开运行==="); } } ``` ​   **主板(MainCard)代码** ```java /** * MainCard.java(主板类) * @author baishenghua * */ public class MainCard { // CPU接口 private CPU cpu; // PCI插槽 private PCI pci1; private PCI pci2; private PCI pci3; public void setCpu(CPU cpu) { this.cpu = cpu; } public void setPci1(PCI pci1) { this.pci1 = pci1; } public void setPci2(PCI pci2) { this.pci2 = pci2; } public void setPci3(PCI pci3) { this.pci3 = pci3; } public CPU getCpu() { return cpu; } public PCI getPci1() { return pci1; } public PCI getPci2() { return pci2; } public PCI getPci3() { return pci3; } } ```   电脑主要设备是主板,所以在电脑类(Computer)对应有主板(MainCard)属性,同时也提供一个电脑运行的方法run()方法,代码如下: ```java /** * Computer.java(电脑类) * @author baishenghua * */ public class Computer { // 主板 private MainCard mainCard; public Computer() { } public Computer(MainCard mainCard) { this.mainCard = mainCard; } // 电脑运行 public void run() { System.out.println("====电脑开始启动====="); if (mainCard == null) { System.out.println("====电脑主板未匹配成功===="); } else { if (mainCard.getCpu() == null) { System.out.println("====CPU设备未配置成功==="); return; } else { // CPU正常工作 mainCard.getCpu().work(); } // CPI1 if (mainCard.getPci1() == null) { System.out.println("===PCI1未匹配设备"); return; } else { mainCard.getPci1().run(); } // PIC2 if (mainCard.getPci2() == null) { System.out.println("===PCI2未匹配设备"); return; } else { mainCard.getPci2().run(); } // PCI3 if (mainCard.getPci3() == null) { System.out.println("===PCI3未匹配设备"); return; } else { mainCard.getPci3().run(); } } System.out.println("====电脑启动成功==="); } } ``` ​   **ComputerTest类代码** ```java /************************************ * ComputerTest.java(电脑测试) * @author baishenghua * */ public class ComputerTest { public static void main(String[] args) { // AMDCPU设备 AMDCPU admcpu = new AMDCPU(); // 华硕声卡设备 ASUSSoundCard sondCard = new ASUSSoundCard(); // 七彩虹显卡 ColorFulCard colorFulCard = new ColorFulCard(); // TP-Link网卡 TPLinkNetWorkCard linkNetWorkCard = new TPLinkNetWorkCard(); MainCard mainCard = new MainCard(); mainCard.setCpu(admcpu); mainCard.setPci1(sondCard); mainCard.setPci2(colorFulCard); mainCard.setPci3(linkNetWorkCard); Computer computer = new Computer(mainCard); computer.run(); } } ```