专业的JAVA编程教程与资源

网站首页 > java教程 正文

Java设计模式之美「策略模式」(策略模式uml)

temp10 2024-09-30 00:30:22 java教程 69 ℃ 0 评论

一、什么是策略模式?

举例:

Java设计模式之美「策略模式」(策略模式uml)

支付场景:当我们在电商购物的时候选购好了商品,在结算的时候弹出各种支付的方式供选择,有微信、支付宝、银联等等。最终由用户来决策使用哪种支付方式来支付商品。类似这样的场景有一个共性算法,由多方来提供具体实现来组成一个算法家族,最终由使用者来做出决策,这样的结构设计对于后续新增的业务扩展会有比较好的弹性支持。

定义:

策略模式是将可变的部分从程序中抽象分离成算法接口,在该接口下分别封装一系列算法实现,使这些算法在客户端调用它们的时候能够互不影响地变化。


二、如何实现策略模式?

组成:

1、策略类:通常由一个接口或者抽象类实现。

package com.yx.strategy;

/**
 * 抽象策略类
 * 支付
 *
 * @author yx
 */
public abstract class PayStrategy {

    /**
     * 支付
     */
    public abstract void pay();
}

2、策略角色:包装了相关的算法和行为。

package com.yx.strategy;

/**
 * 策略角色继承策略类
 * 支付宝
 *
 * @author yx
 */
public class AliPay extends PayStrategy {
    public void pay() {
        System.out.println("支付宝支付");
    }
}
package com.yx.strategy;

/**
 * 策略角色继承策略类
 * 微信
 *
 * @author yx
 */
public class WxPay extends PayStrategy {
    public void pay() {
        System.out.println("微信支付");
    }
}

3、环境角色:持有一个策略类的引用,提供客户端使用。

package com.yx.strategy;

/**
 * 环境角色类:持有Strategy的引用
 *
 * @author yx
 */
public class PayContext {
    private PayStrategy payStrategy;

    public PayStrategy getPayStrategy() {
        return payStrategy;
    }

    public void setPayStrategy(PayStrategy payStrategy) {
        this.payStrategy = payStrategy;
    }

    public void pay(PayStrategy payStrategy) {
        payStrategy.pay();
    }
}

使用案例:

package com.yx.strategy;

public class PayTest {
    public static void main(String[] args) {
        // 支付宝支付
        PayContext ali = new PayContext();
        ali.pay(new AliPay());

        // 微信支付
        PayContext wx = new PayContext();
        wx.pay(new WxPay());
    }
}

执行结果:

支付宝支付
微信支付

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表