网站首页 > java教程 正文
行为设计模式:策略模式
嗨开发商! 设计模式对我来说被认为是一个非常有趣的话题。 这就是为什么我想写他们。
策略模式是可用的行为模式之一。
它允许我们操作代表各种策略的对象运行时。 策略对象执行相关策略。 上下文由一个策略组成。 客户端将始终调用抽象。
让我们先看看UML图……
在这里,上下文是使用策略的人。这样,我们将A族算法定义为类层次结构。
让我们举个例子……
想象一下,我们有一个购物中心。我们可以使用信用卡/借记卡等任何卡进行付款。所以,支付上下文应该能够接受任何卡片:就像一个卡片家族......但是怎么做呢?
首先,我们需要一张牌的策略……
支付卡
public interface PaymentCard {
void pay(String buyer, int amount);
}
现在我们可以决定卡片类型——具体的策略......
信用卡
public class CreditCard implements PaymentCard {
@Override
public void pay(String buyer, int amount) {
System.out.println("paying with CreditCard: Buyer = " + buyer + " Amount = " + amount);
}
}
借记卡
public class DebitCard implements PaymentCard {
@Override
public void pay(String buyer, int amount) {
System.out.println("paying with DebitCard: Buyer = " + buyer + " Amount = " + amount);
}
}
让我们创建我们将使用卡片进行支付的上下文……记住!上下文应该由策略组成……
支付上下文
public class PaymentContext {
private final PaymentCard strategy;
public PaymentContext(PaymentCard strategy) {
this.strategy = strategy;
}
public void doPayment(String buyer, int amount) {
this.strategy.pay(buyer, amount);
}
}
如果你看到这个,PaymentContext 正在接受任何类型的卡(PayCard)!如果有新的卡片类型出现,无需担心……上下文将保持不变……只是我们需要添加另一个具体策略。
无论如何,这也有助于实现 SOLID 原则之一——开放封闭原则(对扩展开放,但对修改关闭)
最后,整个班级设置将是这样的。
StrategyDemo 是我们用来练习的游乐场。 让我们为该策略创建一个上下文。
public class StrategyDemo {
public static void main(String[] args) {
PaymentContext paymentContext = new PaymentContext(new CreditCard());
paymentContext.doPayment("salitha", 100);
paymentContext = new PaymentContext(new DebitCard());
paymentContext.doPayment("salitha", 100);
}
}
输出会是什么?
您可以看到可以使用任何卡完成付款! 根据每张卡的处理,完成支付。
这就是策略模式的全部内容!!!
实际上,这些模式在日常编程以减少设计异常时非常有用。 所以,最好的办法是多练习和使用! 我希望你明白整个想法..
我会在未来写更多的设计模式……
猜你喜欢
- 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设计模式之美「策略模式」(策略模式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)
本文暂时没有评论,来添加一个吧(●'◡'●)