編輯:關於Android編程
適配器模式(Adapter):
適配器模式是一種行為模式,它可以把一個類的接口轉換成為另一個所期待的另一種接口,這樣可以使原本因接口無法在一起工作的兩個類能夠在一起工作了。適配器模式有類的適配器和對象的適配器兩種形式,這裡只介紹對象的適配器模式(與類適配器模式類似),下面為類的適配器(左)和對象適配器模式(右)的簡略類圖結構:
適配器模式所涉及的角色有適配角色、目標角色和適配器角色,具體描述如下:
適配角色:提供需要適配轉換的接口角色。
目標角色:調用者所期待的接口。
適配器角色:把適配角色轉為目標角色的接口。
與之前一樣,我們同樣列舉一個實例來說明適配器模式的使用。在電商平台中,查詢商品、查看商品詳情、添加購物車和支付是最常見不過了。假如原系統中已經實現了商品的查詢、添加購物車以及支付功能,查詢功能包括查詢商品、查看詳情、以及計算商品總價;添加購物車包括查看詳情、商品添加購物車以及支付,目前這兩個模塊功能是不協同工作的,所以下面我們將會把購物車適配成為可以與查看商品一起工作,實現他們的一體化操作。那麼他們的詳細結構類圖如下所示:
好了,下面羅列下適配器模式的核心代碼。
目標角色(SaleShopCenter):
/**
* @description :
* 目標對象
*/
public interfaceSaleShopCenter {
List
SalescanSaleDetail(String pId);
double calculateTotalPrice();
}
適配角色(ShoppingCart):
/**
* @description :
* 適配的對象
*/
public class ShoppingCart {
private Salesale =null;
public staticList
public Sale scanSaleDetail(StringpId) {
// 異步請求網絡
// TODO
// 這裡模擬實現
sale = getSale(pId);
return sale;
}
public voidaddSaleShoppingCart(List
// 異步請求網絡
// TODO
addCart(sales);
}
public booleanbillPay(List
// 異步請求網絡
// TODO
// 這裡模擬支付成功
booleanpayStatus =true;
if(null ==SaleShoppingManager.results
||0 > SaleShoppingManager.results.size()) {
payStatus = false;
}
return payStatus;
}
private Sale getSale(StringpId) {
if(null ==SaleShoppingManager.results
||0 > SaleShoppingManager.results.size()) {
return null;
}
Salesale = null;
for(Saleitem : SaleShoppingManager.results) {
if(item.getpID().equals(pId)) {
sale = item;
}
}
return sale;
}
private voidaddCart(List
results = sales;
}
}
適配器角色(SaleShoppingManager):
/**
* @description :
* 適配器對象角色
*/
public classSaleShoppingManager implementsSaleShopCenter {
private ShoppingCartcart =null;
public staticList
public SaleShoppingManager() {
cart = new ShoppingCart();
}
@Override
public List
results = new ArrayList
// 異步網絡請求
// TODO
// 這裡模擬實現
results = getSales();
return results;
}
@Override
public Sale scanSaleDetail(StringpId) {
return cart.scanSaleDetail(pId);
}
@Override
public doublecalculateTotalPrice() {
if(null ==results || 0 >results.size()) {
return 0;
}
double totalPrice = 0;
for(Salesale :results) {
totalPrice += sale.getpPrice();
}
return totalPrice;
}
private List
List
Salesale = new Sale();
sale.setpID(0000121300);
sale.setbID(1111232300);
sale.setpName(襯衫-黑領);
sale.setpPrice(123.14);
sale.setpDescri(黑色、圓領,高端大氣!);
result.add(sale);
Salesale2 = new Sale();
sale2.setpID(0000121311);
sale2.setbID(1111232311);
sale2.setpName(襯衫-黑領);
sale2.setpPrice(123.34);
sale2.setpDescri(黑色、圓領,高端大氣!);
result.add(sale2);
Salesale3 = new Sale();
sale3.setpID(0000121322);
sale3.setbID(1111232322);
sale3.setpName(襯衫-黑領22);
sale3.setpPrice(123.24);
sale3.setpDescri(黑色、圓領,高端大氣!);
result.add(sale3);
return result;
}
public ShoppingCart getCart() {
return cart;
}
}
下面為程序的運營結果圖,後面我會上傳項目代碼,感興趣的同學可以下載跑跑。效果圖如下:
好了,到這裡適配器模式已經介紹完了。
本次項目,我用apache-tomcat將自己的計算機弄成了一個小服務器,然後對裡面的jsp類型的文件進行讀寫。首先,如何弄服務器呢?1.下載一個apache-tomca
前言最經研究了一下拖拽排序的ListView,跟酷狗裡的播放列表排序一樣,但因為要添加自己特有的功能,所以研究了好長時間。一開始接觸的是GitHub的開源項目&mdash
一、新建個項目, 然後創建一個module名叫processor新建module的時候一定要選擇 Java Library 否則在後面會找不到AbstractProces
Android React Native 已經將幾個常用的原生組件進行了封裝,比如 ScrollView 和 TextInput,但是並不是所有系統的原始組件都被封裝了,