zoukankan      html  css  js  c++  java
  • 设计模式-策略模式

    策略模式

    简介:策略模式定义了一系列算法,并将算法封装起来,使他们可以相互替换,且算法的变化不影响使用算法的客户;把使用算法的责任和算法的实现分割开,并委派给不同的对象对这些算法进行管理
    主要角色
    1. 抽象算法类(Strategy) 定义公共接口
    2. 具体策略实现类(ConCrete Strategy) 具体实现类实现具体的算法
    3. 环境类(Context) 持有一个策略类的引用,给客户端调用
    应用场景:
    1. 电商中的支付方式,随着版本的迭代支持的支付方式可能会越来越多
    2. 消息推送方式等
    实现(支付为例)
    1. 抽象算法类
    public interface PaymentStrategy {
    
        public void pay(int amount);
    
    }
    
    1. 实现类
    /******
    *    信用卡支付
    *
    **/
    public class CreditCardStrategy implements PaymentStrategy(){
        
        private String name;
        private String cardNumber;
        private String cvv;
        private String dateOfExpiry;
    
        public CreditCardStrategy(String nm, String ccNum, String cvv, String expiryDate){
    
            this.name=nm;
            this.cardNumber=ccNum;
            this.cvv=cvv;
            this.dateOfExpiry=expiryDate;
        }
    
         @Override
        public void pay(int amount) {
            System.out.println(amount +" paid with credit/debit card");
        }
    }
    
    /******
    *    支付宝支付
    *
    **/
    public class AlipayCardStrategy implements PaymentStrategy(){
        
        private String tel;
        private String password;
     
        public AlipayCardStrategy (String tel, String password ){
    
            this.tel=tel;
            this.password =password ;
         
        }
    
         @Override
        public void pay(int amount) {
            System.out.println(amount +" paid with Alipay");
        }
    }
    
    1. 环境类(选择支付方式调用支付)
        public class PayContext(){
            PaymentStrategy paymentStrategy = null;
            //初始化默认支付方式
            public PayContext(PaymentStrategy paymentStrategy ){
                this.paymentStrategy = paymentStrategy ;
            }
            //选择支付方式
             public void setPaymentStrategy (PaymentStrategy paymentStrategy ){
                this.paymentStrategy = paymentStrategy ;
            }
        //支付
         public void pay(int amount ){
                paymentStrategy.pay(amount )
            }    
    }
    
    总结

    优点:解耦,可读性、扩展性增强
    缺点:要了解所有的实现策略方法

  • 相关阅读:
    POJ 3744:Scout YYF I 概率DP+特征方程+快速幂
    浏览器实现颜色渐变效果(兼容)
    css透明(支持各浏览器)
    sql server密钥
    DDL(Oracle)
    DML(Oralce)
    SQL(Oracle)
    Reflect
    Exception
    XML语法
  • 原文地址:https://www.cnblogs.com/monkay/p/11424538.html
Copyright © 2011-2022 走看看