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 )
            }    
    }
    
    总结

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

  • 相关阅读:
    Trapping Rain Water
    Construct Binary Tree from Preorder and Inorder Traversal
    Flatten Binary Tree to Linked List
    Permutations II
    Unique Paths II
    Path Sum II
    Unique Binary Search Trees II
    evdev module-----uinput.py
    evdev module-----events.py
    evdev module-----device.py
  • 原文地址:https://www.cnblogs.com/monkay/p/11424538.html
Copyright © 2011-2022 走看看