设计模式之——策略模式

关于设计模式推荐 《Head First 设计模式》
第一次感觉到深入浅出的书,读完之后,心中疑惑基本彻底明了。


场景描述:
         系统支付环节,存在不同账户体系(不同第三方渠道),根据不同的账户对应的支付行为实现不一致,但是支付模式一致。

举例:
用户支付账户:

UserA  A账户体系(易宝账户)
UserB  B账户体系 (连连支付)
UserC  C账户体系(联动优势)


对应订单:

Order_A,Order_B,Order_C

描述:
      用户 A/B/C 购买理财产品后,分别产生订单 Order_A/Order_B/Order_C,每一笔订单都需要进行支付,由于ABC分别对应不同支付渠道的账户类型,总体模式一致,但是每个支付通道又具有各自的特殊处理,如果使用编程式实现,如果一家支付通道接口发生变更,公司产品跟随更改,改动一个地方所有的支付通道都会受到影响。

策略模式
    使用策略模式可以有好的解决上述问题.
//模式超类
public abstract Order{
  //支付行为
  public PayBehavior payBehavior;(针对接口的编程)
  //支付动作
  pbulic void pay(){
    payBehavior.pay();
   }
  //装载策略接口实现类对象
  puoblic void setPayBehavior(PayBehavior payBehavior){
        payBehavior = payBehavior
  }

}

策略接口:

public Interface PayBehavior {

   public void pay();//支付接口
}


策略接口实现:

public class Apay implements PayBehavior {
     public void pay(){
      sysout("A pay");
     }
}

public class Bpay implements PayBehavior {
     public void pay(){
      sysout("B pay");
     }
}

public class Cpay implements PayBehavior {
     public void pay(){
      sysout("C pay");
     }
}

策略对象:

public class OrderPlot extends Order{
   //正常进行构造即可

}

测试:

public class Test{

    public static void main(String[] args){
     //构造策略对象
     Order order = new OrderPlot();
     //装载策略接口
           order.setPayBehavior(new Apay());
     //策略方法执行
           order.pay();
    }

}

猜你喜欢

转载自caizhaohua.iteye.com/blog/2396515