网站首页 > java教程 正文
一、什么是策略模式?
举例:
支付场景:当我们在电商购物的时候选购好了商品,在结算的时候弹出各种支付的方式供选择,有微信、支付宝、银联等等。最终由用户来决策使用哪种支付方式来支付商品。类似这样的场景有一个共性算法,由多方来提供具体实现来组成一个算法家族,最终由使用者来做出决策,这样的结构设计对于后续新增的业务扩展会有比较好的弹性支持。
定义:
策略模式是将可变的部分从程序中抽象分离成算法接口,在该接口下分别封装一系列算法实现,使这些算法在客户端调用它们的时候能够互不影响地变化。
二、如何实现策略模式?
组成:
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());
}
}
执行结果:
支付宝支付
微信支付
猜你喜欢
- 2024-09-30 Java策略模式在动态数据验证中的应用
- 2024-09-30 《设计模式》之策略模式(策略设计模式详解)
- 2024-09-30 Spring 中策略模式的 2 个经典应用
- 2024-09-30 Java策略模式实现动态验证不同来源的数据
- 2024-09-30 策略模式介绍以及具体使用场景(策略模式的优点及适用环境)
- 2024-09-30 什么是策略模式(策略模式的意图是什么)
- 2024-09-30 设计模式系列—策略模式(策略模式实现)
- 2024-09-30 快速带你彻底弄懂23种设计模式-策略模式
- 2024-09-30 「java设计模式」(7)——策略模式(案例解析)
- 2024-09-30 使用 Java 的策略设计模式(在java中找一个应用策略模式的实例)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)