1.1 封裝的含義
封裝也叫信息隱藏或者數(shù)據(jù)訪問保護(hù),類通過暴露有限的訪問接口,授權(quán)外部僅能通過類提供的方式(或者函數(shù))來訪問內(nèi)部信息或者數(shù)據(jù)。
public class Wallet {
private String id;
private long createTime;
private BigDecimal balance;
private long balanceLastModifiedTime;
// ...省略其他屬性...
public Wallet() {
this.id = IdGenerator.getInstance().generate();
this.createTime = System.currentTimeMillis();
this.balance = BigDecimal.ZERO;
this.balanceLastModifiedTime = System.currentTimeMillis();
}
// 注意:下面對get方法做了代碼折疊,是為了減少代碼所占文章的篇幅
public String getId() { return this.id; }
public long getCreateTime() { return this.createTime; }
public BigDecimal getBalance() { return this.balance; }
public long getBalanceLastModifiedTime() { return this.balanceLastModifiedTime; }
public void increaseBalance(BigDecimal increasedAmount) {
if (increasedAmountpareTo(BigDecimal.ZERO) < 0) {
throw new InvalidAmountException("...");
}
this.balance.add(increasedAmount);
this.balanceLastModifiedTime = System.currentTimeMillis();
}
public void decreaseBalance(BigDecimal decreasedAmount) {
if (decreasedAmountpareTo(BigDecimal.ZERO) < 0) {
throw new InvalidAmountException("...");
}
if (decreasedAmountpareTo(this.balance) > 0) {
throw new InsufficientAmountException("...");
}
this.balance.subtract(decreasedAmount);
this.balanceLastModifiedTime = System.currentTimeMillis();
}
}
對于上面的代碼,id和createTime都是創(chuàng)建錢包時(shí)由程序生成的,所以對用戶來說是透明的,即:無需提供set方法。對于balance來說,只存在說錢包數(shù)據(jù)的增減,不會存在所謂的set的操作,因此只需要提供increase和decrease操作即可,同時(shí)balanceLastModifiedTime是跟隨increase和decrease操作而變化,不存在set的操作。
1.2 實(shí)現(xiàn)封裝的方式
在編程語言中,我們使用訪問權(quán)限控制的方式實(shí)現(xiàn)封裝,比如Java的public/protected/private以及default實(shí)現(xiàn)不同的權(quán)限設(shè)定?!娟P(guān)注尚硅谷,輕松學(xué)IT】因此,我們說使用lombok直接將實(shí)體類使用@Data或者直接全部屬性添加get/set方法,實(shí)際上可能就是壞味道。
所以,如果我們習(xí)慣了使用lombok插件,我們在開發(fā)中,就必須對某些特殊的屬性使用level屬性進(jìn)行權(quán)限控制。
1.3 封裝的意義
訪問控制,避免不必要的屬性被外部訪問或者修改,以達(dá)到保護(hù)的目的;如果不做控制,看起來提升了代碼的靈活性,但是會導(dǎo)致不可控,可能導(dǎo)致代碼可以任意被修改,影響代碼的可讀性、可維護(hù)性。
提高易用性,減少暴露的屬性,調(diào)用者不必關(guān)心所有屬性及其含義,只需要調(diào)用提供的方法即可,降低調(diào)用者的理解和學(xué)習(xí)成本。
文章來源:Winston Lu
推薦閱讀:
Java開發(fā)基礎(chǔ)篇SE封裝的寫法
java開發(fā)之java開發(fā)環(huán)境的快速構(gòu)建
java開發(fā)之SSM開發(fā)框架返回搜狐,查看更多
責(zé)任編輯:
文章標(biāo)題:Java培訓(xùn):封裝的含義及實(shí)現(xiàn)方式
本文地址:http://balticsea-crewing.com/show-69262.html
本文由合作方發(fā)布,不代表中職學(xué)校招生網(wǎng)_55px.com.cn立場,轉(zhuǎn)載聯(lián)系作者并注明出處:中職學(xué)校招生網(wǎng)_55px.com.cn
免責(zé)聲明:本文僅代表文章作者的個(gè)人觀點(diǎn),與本站無關(guān)。其原創(chuàng)性、真實(shí)性以及文中陳述文字和內(nèi)容未經(jīng)本站證實(shí),請讀者僅作參考,并自行核實(shí)相關(guān)內(nèi)容。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請聯(lián)系郵箱:dashenkeji8@163.com,我們將在第 一 時(shí) 間進(jìn)行核實(shí)處理。軟文/友鏈/推廣/廣告合作也可以聯(lián)系我。