JAVA设计模式之策略模式

Posted 饮酒至天明

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA设计模式之策略模式相关的知识,希望对你有一定的参考价值。

策略模式
定义了算法族,分别封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户。

使用场景
电商行业里的支付模式,一般分为银联、支付宝、微信,一种业务,多种实现方式,如果哪种发生变化
只要修改对应的实现即可,未来引入新的支付,例如积分支付,增加一个实现类,而不需要改变现有代码。
遵循原则
1. 开闭原则:对扩展开放,对修改关闭
2. 针对接口编程,而不是针对实现编程
示例:

 

package com.study.headfirst.strategy;

/**
 * @author mdl
 * @date 2019/12/06
 */
public interface Payment {

    /**
     * 发起支付
     * 
     * @param params
     */
    public Object gotoPay(Object...params);
    
    /**
     * 支付回写
     * 
     * @param params
     */
    public void notify(Object...params);
    
}

 

package com.study.headfirst.strategy;

/**
 * 支付宝
 * 
 * @author mdl
 * @date 2019/12/06
 */
public class Alipay implements Payment{

    /* (non-Javadoc)
     * @see com.study.headfirst.strategy.Payment#gotoPay(java.lang.Object[])
     */
    @Override
    public Object gotoPay(Object... params) {
        System.out.println("开始调用支付宝支付...");
        return null;
    }

    /* (non-Javadoc)
     * @see com.study.headfirst.strategy.Payment#notify(java.lang.Object[])
     */
    @Override
    public void notify(Object... params) {
        // TODO Auto-generated method stub
         
    }

}
package com.study.headfirst.strategy;

/**
 * 微信支付
 * 
 * @author mdl
 * @date 2019/12/06
 */
public class WechatPay implements Payment{

    /* (non-Javadoc)
     * @see com.study.headfirst.strategy.Payment#gotoPay(java.lang.Object[])
     */
    @Override
    public Object gotoPay(Object... params) {
        System.out.println("开始调用微信支付...");
        return null;
    }

    /* (non-Javadoc)
     * @see com.study.headfirst.strategy.Payment#notify(java.lang.Object[])
     */
    @Override
    public void notify(Object... params) {
        // TODO Auto-generated method stub
         
    }

}
package com.study.headfirst.strategy;

/**
 * @author mdl
 * @date 2019/12/06
 */
public class PayFactory {
    
    private Payment payment;

    PayFactory(Payment payment){
        this.payment = payment;
    }
    
    
    public Object gotoPay(Object... params) {
        payment.gotoPay(params);
         return null;
    }

    
    public void notify(Object... params) {
        payment.notify();
    }
    
}

编写测试类:

package com.study.headfirst.strategy;

/**
 * @author mdl
 * @date 2019/12/06
 */
public class Test {

    public static void main(String[] args) {
        // 这里只谈策略模式,学习了工厂模式之后,这里应设计成根据前端传入的支付类型
        // 如 1 代表支付宝,2 代表微信,以此获取具体的支付方式,且此方法在PayFactory定义
        PayFactory factory =new PayFactory(new Alipay());
        factory.gotoPay(new Object[] {"1"});
        
        factory =new PayFactory(new WechatPay());
        factory.gotoPay(new Object[] {"2"});
    }
    
}

 

以上是关于JAVA设计模式之策略模式的主要内容,如果未能解决你的问题,请参考以下文章

JAVA设计模式之策略模式

Java设计模式之策略模式(Strategy)

Java 设计模式之策略学习与掌握

Java 设计模式之策略学习与掌握

JAVA SCRIPT设计模式--行为型--设计模式之Strategy策略模式(21)

JAVA SCRIPT设计模式--行为型--设计模式之Strategy策略模式(21)