面向对象编程思想(一) - 电脑组装
面向对象编程 - 电脑组装
(一)首先需要分析电脑的组装
1.电脑的构成:显示器+主机
2.而主机的构成是由:电源+硬盘+主板
3.在主板上应该包含:cpu+内存条+PCI插槽+USB插槽
4.PCI插槽上可能还有:显卡+声卡
5.USB插槽上可能会插有:U盘
(二)进行接口的划分
因为,电脑的每一个部件并不存在什么共同点,因此不能用一个接口去表示所有的部件,为了达到后期可能会扩展或更换电脑的部件,这里把电脑的每一个部件都写成接口,当进行电脑部件的更换时,只需要新的部件实现该部件的接口即可,需要编写的接口如下:
1首先需要有Computer这个接口,即:
1 /** 2 * 电脑接口 3 * @author Wfei 4 * 5 */ 6 public interface IComputer 7 { 8 9 }
2.同样的,还有:显示器接口:IDisplyer、主机的接口:IMainBox、电源接口:IPower、硬盘接口:IHardDisk、主板接口:IMainBoard、CPU接口:ICpu、内存条接口:IMemory、PCI插槽接口:IPci、USB插槽接口:IUsb、显卡接口:IGraphicsCard、声卡接口:IAudioCard、U盘接口:IUsbDisk
(三)编写实现上述接口的方法
1.电脑类的编写,电脑需要实现电脑接口,并且在电脑需要包含:主机+显示器,因此在电脑类中需要包含两个属性:主机+显示器,代码如下:
1 /** 2 * 实现电脑接口 3 * @author Wfei 4 * 5 */ 6 public class Computer implements IComputer 7 { 8 /** 9 * 电脑会包含两个组成部分:显示器+主机,因此需要两个属性 10 */ 11 //显示器 12 private IDisplyer displyer; 13 //主机 14 private IMainBox mainBox; 15 16 public IDisplyer getDisplyer() 17 { 18 return displyer; 19 } 20 public void setDisplyer(IDisplyer displyer) 21 { 22 this.displyer = displyer; 23 } 24 public IMainBox getMainBox() 25 { 26 return mainBox; 27 } 28 public void setMainBox(IMainBox mainBox) 29 { 30 this.mainBox = mainBox; 31 } 32 }
2.同样的,主机也包含3个部分,即:电源+硬盘+主板,因此也需要3个属性;而主板包含4个部分,即:cpu+内存+pci+usb,因此需要4个属性,因为主板上可能有多个pci接口和usb接口,因此变量pci和usb需要用数组进行存储,并且还需要另外添加两个方法,用于将相应的硬件插入到相应的接口编号上,代码如下:
1 //这里还需要两个方法,用于将pci、usb插槽上的硬件安装到相应的插槽编号上 2 public void setPci(IPci pci,int index) 3 { 4 pcis[index] = pci; 5 } 6 public void setUsb(IUsb usb,int index) 7 { 8 this.usb[index] = usb; 9 }
3.其他的类在实现相应的接口的方法有:
显示器类实现IDisplyer接口:public class Displayer implements IDisplyer
cpu类实现ICpu接口:public class Cpu implements ICpu
显示器类实现IDisplyer接口:public class Displayer implements IDisplyer
硬盘类实现IHardDisk接口:public class HardDisk implements IHardDisk
内存类实现IMemory接口:public class Memory implements IMemory
电源类实现IPower接口:public class Power implements IPower
4.特别的,显卡类需要实现两个接口,即:IGraphicsCard接口、IPci接口,因为显卡需要满足一定的PCI接口才可以插在显卡的插槽上,代码如下:
1 /** 2 * 显卡类实现IGraphicsCard接口、IPci接口 3 * @author Wfei 4 * 5 */ 6 public class GraphicsCard implements IGraphicsCard, IPci 7 { 8 9 }
5.类似的还有:
声卡类实现IAudioCard接口、IPci接口:public class AudioCard implements IAudioCard, IPci
u盘实现IUsbDisk接口、IUsb接口:public class UsbDisk implements IUsbDisk, IUsb
(四)所有的接口和实现类编写完毕后,就需要实例化出来米一个部件的实体,并进行电脑的组装,代码如下:
1 public class Person 2 { 3 4 /** 5 * @param args 6 */ 7 public static void main(String[] args) 8 { 9 //实例化电脑类,以接收电脑的组装 10 Computer computer = new Computer(); 11 //购买显示器 12 Displayer displayer = new Displayer(); 13 //购买机箱 14 MainBox mainBox = new MainBox(); 15 16 //进行电脑的初步组装 17 computer.setDisplyer(displayer); 18 computer.setMainBox(mainBox); 19 20 //购买电源 21 Power power = new Power(); 22 //购买硬盘 23 HardDisk hardDisk = new HardDisk(); 24 //购买主板 25 MainBoard mainBoard = new MainBoard(); 26 27 //将主板、电源、硬盘安装到机箱内 28 mainBox.setHardDisk(hardDisk); 29 mainBox.setMainBoard(mainBoard); 30 mainBox.setPower(power); 31 32 //购买cpu 33 Cpu cpu = new Cpu(); 34 //购买内存条 35 Memory memory = new Memory(); 36 37 //将内存条、cpu安装到主板上 38 mainBoard.setCpu(cpu); 39 mainBoard.setMemory(memory); 40 41 //因为主板上会存在多个pci接口,所以在插入pci接口硬件时,需要设定该插入到那个接口上 42 //首先,购买声卡、显卡 43 AudioCard audioCard = new AudioCard(); 44 GraphicsCard graphicsCard = new GraphicsCard(); 45 //然后,将声卡插入到第一个pci插槽上 46 mainBoard.setPci(audioCard, 0); 47 //再将显卡插入到第二个pci插槽上 48 mainBoard.setPci(graphicsCard, 1); 49 50 //类似的插入usb插槽的硬件 51 UsbDisk usbDisk = new UsbDisk(); 52 mainBoard.setUsb(usbDisk, 0); 53 54 System.out.println("电脑组装完毕!"); 55 } 56 }
(五)总结
面向对象的编程思想,这样进行电脑的组装,可能看上去会比一般的编写方法用到了更多的文件,写了更多行的代码,但是当后期进行电脑部件更换时,只需要在添加一个类用于实现相应的部件接口,并进行购买,插入到相应的位置即可,根本不需要改动程序的“主要逻辑设计”,也不会影响到其他代码的编写