设计模式-外观模式的应用

现在很多商场都实行积分制,积分到了一定数额可以获取相应的兑换物品。假如一个客户(小马),要在淘宝上,想要兑换一个aj鞋,那么需要如何实现呢?

1、效验小马的积分是否达到该商品的积分要求。

2、效验是否已经支付了积分。

3、效验是否分配了物流单号。

经历了这三步,就可以获得自己想要的aj鞋子了。

那么代码如何实现呢?

我们先来看一下是否满足条件的接口。

public abstract interface Executive {
  public boolean validation(PointGift pointGift);
}

物品实体类:

public class PointGift {

  private String name;

  public PointGift(String name) {
    this.name = name;
  }
  public String getName() {
    return name;
  }
}

积分满足条件服务的实现:

public class IntegralService implements Executive {

  public boolean validation(PointGift pointGift) {
    System.out.println("校验" + pointGift.getName() + "积分资格通过");
    return true;
  }
}

积分扣除的服务:

public class PointPaymentService implements Executive {

  public boolean validation(PointGift pointGift) {
    System.out.println("支付" + pointGift.getName() + "积分成功");
    return true;
  }
}

分配物流服务

public class ShoppingService implements Executive{

  public String getOrderNo(PointGift pointGift) {
    return null;
  }
  public boolean validation(PointGift pointGift) {
    //物流系统的对接逻辑
    System.out.println(pointGift.getName() + "进入物流系统!"+"单号:666");
    return true;
  }
}

测试:

public class Test {
  public static void main(String[] args) {
    PointGift pointGift = new PointGift("卫衣");
    GiftExchangeService giftExchangeService =new GiftExchangeService();
    giftExchangeService.giftExchange(pointGift);
  }
}

结果如下:

校验卫衣积分资格通过
支付卫衣积分成功
卫衣进入物流系统!单号:666

Process finished with exit code 0

1、外观模式的一般描述是:外观模式定义了一个高层的功能,为子系统中的多个模块协同的完成某种功能需求提供简单的对外功能调用方式,使得这一子系统更加容易被外部使用。

外观模式的目的不是给予子系统添加新的功能接口,而是为了让外部减少与子系统内多个模块的交互,松散耦合,从而让外部能够更简单地使用子系统。

外观模式的本质是:封装交互,简化调用。

2、外观模式应用场景

  当我们访问的子系统拥有复杂额结构,内部调用繁杂,初接触者根本无从下手时,不凡由资深者为这个子系统设计一个外观类来供访问者使用,统一访问路径(集中到外观类中),将繁杂的调用结合起来形成一个总调用写到外观类中,之后访问者不用再繁杂的方法中寻找需要的方法进行调用,直接在外观类中找对应的方法进行调用即可。

  还有就是在系统与系统之间发生调用时,也可以为被调用子系统设计外观类,这样方便调用也,屏蔽了系统的复杂性。

注意:

应用层绝对不能关心子系统,子系统只和外观类通信,应用层只和外观类通信。
* 子系统不经常变化的话,可以用实体外观类
* 子系统经常变化的话,需要使用抽象外观类。

 

posted @ 2019-04-22 16:56 左手背右手背 阅读(...) 评论(...) 编辑 收藏