码迷,mamicode.com
首页 > 移动开发 > 详细

适配器角色在android中使用

时间:2015-05-01 18:46:40      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:android   设计模式   

适配器模式(Adapter):

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

技术分享 

适配器模式所涉及的角色有适配角色、目标角色和适配器角色,具体描述如下:

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

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

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

 

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

技术分享

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

目标角色(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

 

 

 

 

 

 

 

 

适配器角色在android中使用

标签:android   设计模式   

原文地址:http://blog.csdn.net/why_2012_gogo/article/details/45420603

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!