您的位置 首页 java

菜鸟用一个实例谈谈Java面向对象,快速理解。

虽然我学JAVA两年多了,基础还可以,一些常用的框架也会弄,设计模式也会个几种。但是我还不敢我说我JAVA或者软件多么多么在行,对面向对象思想有多少多少领悟。那为什么我还要在这里对人现眼呢,嗯,我还是想用一个JAVA初级水平的角色和大家一起来探讨JAVA软件编程的经验,分享自己的见地,欢迎喜爱JAVA的朋友前来拍板提出异议。

java面向对象

大家都知道JAVA的核心就是面向对象思想,也就是OO,但是说起来很容易,真正想弄个透彻,并不是那么容易的。说来说去面向对象的特征也就那几个:抽象,封装,继承,多态,其实一个抽象就可能难倒70%-80%的程序员,包括什么软件工程师(我更喜欢JAVA程序员的职称)。不是说简单就容易,二分法算法很简单吧,可是1947就出现的二分算法,直到1961年才有世界上第一个没有BUG的二分算法(盗用下经典的例子啦)。还是别扯远了,来个例子:

业务需求如下:

1.一个客户可以有多套房子的房贷

2.签署贷款合同以后要监控是否按照还贷计划表来执行

3.自动还款,当多套房贷时,一次还款可能包括多个房贷的额度,需要自动匹配

4.可以提前还款

5.可以延长或缩短贷款的时间

6.利率可以调整

7.滞纳金的问题

是不是看的有点头昏呢,其实我对贷款买房业务也不了解,为了大致把问题用面向对象进行描述,那么我们就开始进行问题抽象(这里不包括领域驱动设计DDD)。

对象分析

首先我们知道肯定有一个事务用来表示贷款买房的人,用Coustomer来表示,他有什么属性呢,人我们就用姓名区分好了,因为他贷款要买房,肯定有一些钱(否则还是不要有买房的念头吧)

房子就用House来表示,房子有什么属性呢,肯定有价格啦,利率啦,年限啦.每个月你要还多少,或者一年还多少(只有爱存不存ICBC,没有爱还不还)。贷款就用Credit来表示,贷款就有客户啦,还钱时间啦,房子啦。

你贷款银行就会跟你签合同,你跑不了了。合同就用agreement来表示,贷款合同有什么属性呢,合同肯定有贷款,是否坏账标记,滞纳金。

业务分析

客户买房子,假设所购的房子已经付了首付(不然银行不可能给你贷,除非你爸是李刚)。要跟银行贷款,那么就要和银行签订贷款合同。

贷款买的房子可能不止一套,我们就不管银监会的神马限购令了。

客户还款,你每隔多少时间还银行钱,那么就会自动根据利率给你匹配计算了(因为银行工作的MM有点懒哦),如果还的钱不够,那么就会给你记坏账了,你拖得太久

银行就会通知你要付款,要是你没有能力还了,银行就会销毁合同,收走你的房,花你的钱,抢你的女朋友,打你的娃(开玩笑啦)。

这里我们的业务方法加了年限和利率的改变实现,主要是为了简单易懂。最好使用JAVA DEGISN PATTER 中的Observer(观察者设计模式)来实现,只要贷款监听倒利率或年限改变,就会自动进行操作。

后面我们再用观察者设计模式来解决这个问题。

package org.javaer.code.test;

import java.util.List;

import java.util.Map;

class Customer {

/**

* 客户

*/

private String username = “donglinmeimei”;

private double money = 0.0;

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public double getMoney() {

return money;

}

public void setMoney(double money) {

this.money = money;

}

}

class House {

/**

* 房子

*/

private String num = “3#116″;

private double price = 0.0;

private double rax = 0.0;// 利率

private int years = 0;// 年限

public String getNum() {

return num;

}

public void setNum(String num) {

this.num = num;

}

public double getPrice() {

return price;

}

public void setPrice(double price) {

this.price = price;

}

public double getRax() {

return rax;

}

public void setRax(double rax) {

this.rax = rax;

}

public int getYears() {

return years;

}

public void setYears(int years) {

this.years = years;

}

}

class Credit {

/**

* 贷款

*/

private Customer customer;

private int backTime;

private List<House> housees;

// 每月还多少

private Map<House, Double> toPay;

public Customer getCustomer() {

return customer;

}

public void setCustomer(Customer customer) {

this.customer = customer;

}

public int getBackTime() {

return backTime;

}

public void setBackTime(int backTime) {

this.backTime = backTime;

}

public List<House> getHousees() {

return housees;

}

public void setHousees(List<House> housees) {

this.housees = housees;

}

public Map<House, Double> getToPay() {

return toPay;

}

public void setToPay(Map<House, Double> toPay) {

this.toPay = toPay;

}

}

class Agreement {

/**

* 合同

*/

private Credit credit;

private boolean isContinue;

// 滞纳金

private double amercement = 0.0;

public Credit getCredit() {

return credit;

}

public void setCredit(Credit credit) {

this.credit = credit;

}

public boolean isContinue() {

return isContinue;

}

public void setContinue(boolean isContinue) {

this.isContinue = isContinue;

}

public double getAmercement() {

return amercement;

}

public void setAmercement(double amercement) {

this.amercement = amercement;

}

}

interface BankService {

// 买房,同时产生贷款和合同

public void buyHousees(Customer customer, List<House> houseed);

// 还款,计算是否有滞纳金

public double payMoney(int backTime, Agreement agreement, double money,

Customer customer);

// 改变利率

public Map<House, Double> changeRax(House house, double rax);

// 改变年限

public Map<House, Double> changeYears(House house, int backTime);

}

class BankServiceImpl implements BankService {

public void buyHousees(Customer customer, List<House> houseed) {

}

public double payMoney(int backTime, Agreement agreement, double money,

Customer customer) {

return money;

}

public Map<House, Double> changeRax(House house, double rax) {

return null;

}

public Map<House, Double> changeYears(House house, int backTime) {

return null;

}

}

public class Bank{

public static void main(String[] args) {

Customer customer = new Customer();

customer.setUsername(“lsl码农”);

customer.setMoney(10);

List<House> housees = new ArrayList<House>();

House house = new House();

house.setNum(“3#116″);

house.setPrice(1500000);

house.setRax(0.96);

house.setYears(20);

housees.add(house);

House house1 = new House();

house1.setNum(“4#112″);

house1.setPrice(1100000);

house.setRax(0.155);

house.setYears(30);

housees.add(house1);

House house2 = new House();

house2.setNum(“1#001″);

house2.setPrice(2000000);

house.setRax(0.12);

house.setYears(100);

housees.add(house2);

BankService bs = new BankServiceImpl();

Credit credit = bs.buyHousees(customer, housees);//买房

Agreement agreement = bs.orderAgreement(customer, credit);//签订合同

if(!agreement.isContinue())return;//合同作废

else{

agreement.setAmercement(bs.payMoney(1, agreement, 111111, customer));//还款

for(Entry<House,Double> entry : agreement.getCredit().getToPay().entrySet()){

if(agreement.getAmercement().get(entry.getKey())>=entry.getValue()/3){

agreement.setContinue(false);

System.out.println(agreement.getCredit().getCustomer().getUsername()+”,你的账户产生坏账,合同终止”);

break;

}else{

System.out.println(agreement.getAmercement().get(entry.getKey())>=0?

agreement.getCredit().getCustomer().getUsername()+”,房子”+entry.getKey().getNum()+”的滞纳金为:”+agreement.getAmercement():””);

}

Map<House,Double> topay = bs.changeRax(house2, 1.58);//改变利率

Map<House,Double> topay = bs.changeYears(house2, 50);//改变年限

System.out.println(agreement.getCredit().getCustomer().getUsername()+”,房 子”+entry.getKey().getNum()+”每月还款金额为:”+entry.getValue());

}

}

}

}

文本内容长度有限制,所以例子就只写这一个了,请大家原谅。

如果面对一个领域的问题,能够进行事务抽象分析,那么问题就好解决了。这需要很长时间的项目锻炼,积累不少经验才能做到。但是今天的一小步,明天的一大步(又涉嫌抄袭了),不要忽视平时的小小的成功。

都说JAVA程序员的三件法宝是Question ,DesignPattern ,framework,那么接下来我就根据这几个法宝来一一表达我的观点。我说了希望大家来交流和拍板,大家共同学习,共同进步。

由于时间有限和个人能力有限,做的不好,但我会努力的。敬请持续关注。

文章来源:智云一二三科技

文章标题:菜鸟用一个实例谈谈Java面向对象,快速理解。

文章地址:https://www.zhihuclub.com/194282.shtml

关于作者: 智云科技

热门文章

网站地图