程序员人生 网站导航

[置顶] 适配器角色在android中使用

栏目:框架设计时间:2015-05-29 08:08:16

适配器模式(Adapter):

适配器模式是1种行动模式,它可以把1个类的接口转换成为另外一个所期待的另外一种接口,这样可使本来因接口没法在1起工作的两个类能够在1起工作了。适配器模式有类的适配器和对象的适配器两种情势,这里只介绍对象的适配器模式(与类适配器模式类似),下面为类的适配器(左)和对象适配器模式(右)的简略类图结构:

 

适配器模式所触及的角色有适配角色、目标角色和适配器角色,具体描写以下:

适配角色:提供需要适配转换的接口角色。

目标角色:调用者所期待的接口。

适配器角色:把适配角色转为目标角色的接口。

 

与之前1样,我们一样罗列1个实例来讲明适配器模式的使用。在电商平台中,查询商品、查看商品详情、添加购物车和支付是最多见不过了。假设原系统中已实现了商品的查询、添加购物车和支付功能,查询功能包括查询商品、查看详情、和计算商品总价;添加购物车包括查看详情、商品添加购物车和支付,目前这两个模块功能是不协同工作的,所以下面我们将会把购物车适配成为可以与查看商品1起工作,实现他们的1体化操作。那末他们的详细结构类图以下所示:

好了,下面罗列下适配器模式的核心代码。

目标角色(SaleShopCenter):

/**

 * @description :

 * 目标对象

 */

public interfaceSaleShopCenter {

  

   List<Sale>scanSaleItems(String pKey);

  

   SalescanSaleDetail(String pId);

  

   double calculateTotalPrice();

  

}

 

适配角色(ShoppingCart):

/**

 * @description :

 * 适配的对象

 */

public class ShoppingCart {

   private Salesale = null;

   public staticList<Sale> results =null;   // 摹拟缓存数据?

  

   public Sale scanSaleDetail(StringpId) {

      // 异步要求网络

      // TODO

     

      // 这里摹拟实现

      sale = getSale(pId);

      return sale;

   }

  

   public voidaddSaleShoppingCart(List<Sale> sales) {

      // 异步要求网络

      // TODO

     

      addCart(sales);

   }

  

   public booleanbillPay(List<Sale> sales) {

      // 异步要求网络

      // 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<Sale> sales) {

      results = sales;

   }

}

适配器角色(SaleShoppingManager):

/**

 * @description :

 * 适配器对象角色

 */

public classSaleShoppingManager implementsSaleShopCenter {

   private ShoppingCartcart = null;

   public staticList<Sale> results =null;   // 摹拟缓存数据

 

   public SaleShoppingManager() {

      cart = new ShoppingCart();

   }

  

   @Override

   public List<Sale> scanSaleItems(StringpKey) {

      results = new ArrayList<Sale>();

      // 异步网络要求

      // 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<Sale> getSales() {

      List<Sale>result = new ArrayList<Sale>();

     

      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;

   }

}

下面为程序的运营结果图,后面我会上传项目代码,感兴趣的同学可以下载跑跑。效果图以下:

 

好了,到这里适配器模式已介绍完了。

 

点击我下载代码!

 

 

技术交换群:179914858

 

 

 

 

 

 

 

 

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐