Java 核心在於面向物件(OO),特徵僅四大支柱:抽象、封裝、繼承、多態。但「抽象」一項就能難倒 70-80% 程式設計師。本文以真實房貸業務為例,示範從需求到程式碼的完整 OO 建模過程。
| 實體類別 | 核心屬性 | 業務含義 |
|---|---|---|
Customer | username, money | 借款人 |
House | num, price, rate, years | 抵押房產 |
Credit | customer, backTime, houses, toPay(Map<House,Double>) | 貸款合約彙總 |
Agreement | credit, isContinue, amercement | 法律合同、壞賬標記 |
BankService.buyHousees(customer, houses) → 產生 Credit 與 AgreementpayMoney(time, agreement, money, customer) → 依 toPay 分配金額、計算滯納金isContinue = falsechangeRate(house, newRate)、changeYears(house, newYears) → 重算 toPay進階建議:利率/期限變更觸發重算,宜採用 Observer 模式,Credit 訂閱 House 變更事件,自動重算月繳額,解耦業務邏輯。
// 介面定義
interface BankService {
Credit buyHousees(Customer customer, List<House> houses);
Agreement orderAgreement(Customer customer, Credit credit);
double payMoney(int time, Agreement ag, double money, Customer c);
Map<House,Double> changeRate(House h, double rate);
Map<House,Double> changeYears(House h, int years);
}
// 實作類別(略,重點在結構設計)
class BankServiceImpl implements BankService { /* ... */ }
// 測試主程式
public class Bank {
public static void main(String[] args) {
Customer c = new Customer(); c.setUsername("董林美美"); c.setMoney(10);
List<House> houses = Arrays.asList(
new House("3#116", 1_500_000, 0.96, 20),
new House("4#112", 1_100_000, 0.155, 30),
new House("1#001", 2_000_000, 0.12, 100)
);
BankService bs = new BankServiceImpl();
Credit credit = bs.buyHousees(c, houses);
Agreement ag = bs.orderAgreement(c, credit);
if (!ag.isContinue()) return;
// 後續還款、變更利率/年限、壞賬判定流程...
}
}