Java面向对象(综合实战)

10 篇文章 0 订阅

Java面向对象(综合实战)


前言:学习完Java面向对象,所以对于不太了解的地方就得从实战一些小项目练习获得需要知道的东西,从这些练习中就能更加直观清晰的明白和使用。

练习一:

电脑模型Java实现:

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 chong
*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();
    }
}



练习二:

-银行转账java实现

​ 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();
    }
}

总结:

遇到一个业务项目时,首先要做的是分析,先分析各个类和接口之间的关系,然后设计,整理思路,例如要创建的包,包名,包里要放的东西,包之间的调用,类与类之间的继承,是否抽象,是否要实现接口,在做之前一定要分化清楚,然后再去实现。


至于还有一些经典例子和练习,也得靠自己去理解,所以慢慢来吧,把这些理解清楚了,对于后面的三层就应该更容易做了。。。。

  • 5
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值