网站首页 > java教程 正文
定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用此算法的客户。
类型:
行为型设计模式
适用场景:
比如电商平台的一些常见活动(促销、满减、立减、返现等)。
我们还可以这样理解,在一个系统中有很多类,其区别在于行为不同,策略模式可以让某个对象动态的选择某个行为(也就是某个策略)
策略还可以理解为运算符的+ - * / ,旅行时所要乘坐的交通工具,穿衣时所要选择的衣服...等等等
优点
符合开闭原则
减少if..else等选择结构语句
缺点
客户必须知道所有的策略类,并选择要使用的策略
产生许多策略类
代码实现
定义Payment.java接口文件
public interface Payment {
public void pay();
}
创建具体支付策略并实现Payment接口
Alipay.java策略
public class Bankcard implements Payment {
@Override public void pay() {
System.out.println("使用银行卡付款"); }
}
Bankcard.java策略
public class Bankcard implements Payment {
@Override public void pay() {
System.out.println("使用银行卡付款");
}
}
Wechatpay.java策略
public class Wechatpay implements Payment {
@Override public void pay() {
System.out.println("使用微信支付");
}
}
创建PaymentSystem.java类封装具体策略
public class PaymentSystem {
private Payment payment;
public PaymentSystem(Payment payment) {
this.payment = payment;
}
public void execute(){
payment.pay();
}
}
Client.java类 客户调用
public class Client {
public static void main(String[] args) {
PaymentSystem paymentSystem=null;
String paymentType="alipay";
if("alipay".equalsIgnoreCase(paymentType)){
paymentSystem=new PaymentSystem(new Alipay());
}else if("bankcard".equalsIgnoreCase(paymentType)){
paymentSystem=new PaymentSystem(new Bankcard());
}else if("wechatpay".equalsIgnoreCase(paymentType)){
paymentSystem=new PaymentSystem(new Wechatpay());
}
paymentSystem.execute();
}
}
Client类中使用paymentType变量模拟具体配置,然后通过if..else来实现具体的策略
UML类图
- 上一篇: Spring 中策略模式的 2 个经典应用
- 下一篇: Java策略模式在动态数据验证中的应用
猜你喜欢
- 2024-09-30 Java策略模式在动态数据验证中的应用
- 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中找一个应用策略模式的实例)
- 2024-09-30 Java设计模式之美「策略模式」(策略模式uml)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 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)
本文暂时没有评论,来添加一个吧(●'◡'●)