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接口,例如:
/***************************
*
* @author chong
* CPU插槽接口
*
*/
public interface CPU {
// CPU工作
public void work();
}
PCI接口代码:
/********************************
*
* @author chong
* 主板上PCI插槽标准
*
*/
public interface PCI {
public void run();
}
对于主板上的CPU定义为接口,但对应的实现可以是AMD的CPU也可以是Intel的CPU,例如:
AMD的CPU代码:
/******************************
*
* @author chong
*
*/
public class AMDCPU implements CPU {
@Override
public void work() {
System.out.println("====AMDCPU开始工作=====");
}
}
Intel的CPU代码:
/**************************
*
* @author chong
*
*/
public class IntelCPU implements CPU {
@Override
public void work() {
System.out.println("====IntelCPU开始工作======");
}
}
对于电脑主板上的三个PCI插槽可以匹配声卡、显卡、网卡,在这里我们对应的实现分别为华硕声
卡(ASUSSoundCard)、七彩虹显卡(ColorFulCard)、 Tp-Link网卡(TPLinkNetWorkCard),代
码如下:
华硕声卡(ASUSSoundCard)代码:
/********************************
*
* @author chong
*华硕声卡
*/
public class ASUSSoundCard implements PCI {
@Override
public void run() {
System.out.println("====华硕声卡开始运行=====");
}
}
七彩虹显卡(ColorFulCard)代码
/*************************************
*
* @author chong
* 七彩虹显卡
*
*/
public class ColorFulCard implements PCI {
@Override
public void run() {
System.out.println("======七彩虹显卡开始运行=====");
}
}
Tp-Link网卡(TPLinkNetWorkCard)代码
/******************************
*
* @author liwei
*TPLinkNetWorkCard Tp-Link网卡
*/
public class TPLinkNetWorkCard implements PCI {
@Override
public void run() {
System.out.println("====Tp-Link网卡开运行===");
}
}
主板(MainCard)代码
/******************************
*
* @author chong
*TPLinkNetWorkCard Tp-Link网卡
*/
public class TPLinkNetWorkCard implements PCI {
@Override
public void run() {
System.out.println("====Tp-Link网卡开运行===");
}
}
主板(MainCard)代码
/********************************
*
* @author chong 主板类
*
*/
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()方法,代码如下:
/*********************************
*
* @author liwei 电脑类
*
*/
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类代码
/************************************
*
* @author chong
*电脑测试
*/
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();
}
}
2.1 需求分析
需求分析:
银行转账业务操作步骤:
1、查询对应账号是否存在-findAccountByName();
2、查询银行账号余额是否充足findAccountByMoney();
3、扣款--deduction
4、汇款-remittance
完成思路分析:
以上为每个数据操作单位,但整体又是一个工作单位,
为了满足整体的系统设计高聚合低耦合的设计思路,所以把整体业务
定义为银行业务对象-AccountService接口(AccountServiceImpl对应实现类)
汇款方法-remitMoney(),而在业务类依赖数据操作单位,我们在这里定义AccoutDao类,此类包上面操
作单元
1、查询对应账号是否存在-findAccountByName();
2、查询银行账号余额是否充足findAccountByMoney();
3、扣款--deduction
4、汇款-remittance
2.2 代码实现
根据以上整体需求分析,我们需要提供数据操作对象(AccountDao)和业务操作对象
(AccountServiceImpl对象),而两者的关系是业务对象需要依赖数据操作对象,但值得注意的是业务日
后需要提供对外的接口,所有业务接口的开发需要基于接口的开发,所以业务定义业务接口
(AccountService),代码如下:
银行数据操作对象(AccountDao)代码:
/***************************
*
* @author chong
* 银行数据操作对象
*/
public class AccountDao {
public void findAccountByName() {
System.out.println("====执行查询对应账号是否存在===");
}
public void findAccountByMoney() {
System.out.println("====执行查询银行账号余额是否充足==");
}
public void deduction() {
System.out.println("====执行扣款操作===");
}
public void remittance() {
System.out.println("===执行汇款操作=====");
}
}
银行业务接口(AccountService)代码:
package org.chong.bank.dao.service;
/***************************
*
* @author chong
* 银行业务接口
*/
public interface AccountService {
// 汇款
public void remitMoney();
}
银行业务实现类(AccountServiceImpl)代码:
/**********************************
*
* @author chong 业务实现类
*/
public class AccountServiceImpl implements AccountService {
private AccountDao accountDao;
public AccountServiceImpl(AccountDao accountDao) {
this.accountDao = accountDao;
}
public AccountDao getAccountDao() {
return accountDao;
}
public void setAccountDao(AccountDao accountDao) {
this.accountDao = accountDao;
}
@Override
public void remitMoney() {
// 1、查询对应账号是否存在-findAccountByName();
accountDao.findAccountByName();
// 2、查询银行账号余额是否充足findAccountByMoney();
accountDao.findAccountByMoney();
// 3、扣款--deduction
accountDao.deduction();
// 4、汇款-remittance
accountDao.remittance();
}
}
银行业务实现测试类(银行业务实现类)代码:
/*********************************
*
* @author chong
* Account业务单元测试
*
*/
public class AccountServiceTest {
public static void main(String[] args) {
// 实例化数据库操作对象
AccountDao dao = new AccountDao();
// 实例化业务对象
AccountService accountService = new AccountServiceImpl(dao);
// 调用业务方法
accountService.remitMoney();
}
}
遇到一个业务项目时,首先要做的是分析,先分析各个类和接口之间的关系,然后设计,整理思路,例如要创建的包,包名,包里要放的东西,包之间的调用,类与类之间的继承,是否抽象,是否要实现接口,在做之前一定要分化清楚,然后再去实现。
至于还有一些经典例子和练习,也得靠自己去理解,所以慢慢来吧,把这些理解清楚了,对于后面的三层就应该更容易做了。。。。