论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
数据库
›
分布式数据库
›
【Java知识】Java进阶-战略模式实现
【Java知识】Java进阶-战略模式实现
飞不高
论坛元老
|
2024-11-28 11:46:15
|
显示全部楼层
|
阅读模式
楼主
主题
1015
|
帖子
1015
|
积分
3045
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
战略模式(Strategy Pattern)是一种举动计划模式,它界说了一系列算法,并将每一个算法封装起来,使它们可以互换。战略模式使得算法可以独立于使用它的客户端而变化。
紧张脚色
战略接口(Strategy)
:
这是一个抽象类或接口,界说了全部支持的算法的公共接口。
上下文使用这个接口来调用算法。
详细战略(Concrete Strategy)
:
实现了战略接口的详细算法。
详细战略类提供了详细的算法实现,并且可以被上下文使用。
上下文(Context)
:
持有一个战略接口的引用。
客户端通过上下文来调用算法。上下文在运行时可以动态地改变战略对象,从而改变算法。
示例代码
以下是一个简单的战略模式示例,用于计算差别折扣战略下的价格。
// 策略接口
interface DiscountStrategy {
double calculateDiscount(double price);
}
// 具体策略:无折扣
class NoDiscountStrategy implements DiscountStrategy {
@Override
public double calculateDiscount(double price) {
return price;
}
}
// 具体策略:百分比折扣
class PercentageDiscountStrategy implements DiscountStrategy {
private double percentage;
public PercentageDiscountStrategy(double percentage) {
this.percentage = percentage;
}
@Override
public double calculateDiscount(double price) {
return price * (1 - percentage / 100);
}
}
// 具体策略:固定金额折扣
class FixedAmountDiscountStrategy implements DiscountStrategy {
private double amount;
public FixedAmountDiscountStrategy(double amount) {
this.amount = amount;
}
@Override
public double calculateDiscount(double price) {
return price - amount;
}
}
// 上下文
class ShoppingCart {
private DiscountStrategy discountStrategy;
public ShoppingCart(DiscountStrategy discountStrategy) {
this.discountStrategy = discountStrategy;
}
public void setDiscountStrategy(DiscountStrategy discountStrategy) {
this.discountStrategy = discountStrategy;
}
public double calculateTotal(double price) {
return discountStrategy.calculateDiscount(price);
}
}
// 客户端代码
public class StrategyPatternDemo {
public static void main(String[] args) {
double price = 100.0;
ShoppingCart cart = new ShoppingCart(new NoDiscountStrategy());
System.out.println("Total price with no discount: " + cart.calculateTotal(price));
cart.setDiscountStrategy(new PercentageDiscountStrategy(10));
System.out.println("Total price with 10% discount: " + cart.calculateTotal(price));
cart.setDiscountStrategy(new FixedAmountDiscountStrategy(15));
System.out.println("Total price with $15 discount: " + cart.calculateTotal(price));
}
}
复制代码
长处
算法自由切换
:战略模式使得算法可以独立于使用它的客户端而变化。
扩展性好
:通过增长新的战略类,可以很容易地扩展系统。
避免多重条件判定
:使用战略模式可以避免在客户端代码中使用多重条件判定来选择算法。
缺点
战略类数量增长
:当战略数量较多时,会增长类的数量,从而增长系统的复杂性。
客户端需要了解战略
:客户端需要知道有哪些战略可供选择,并了解怎样创建和配置这些战略对象。
实用场景
当有多种算法需要实现,并且这些算法可以互换时。
当算法在运行时需要动态地改变时。
当算法的实现需要隐藏,大概算法的实现细节对客户端不可见时。
战略模式是一种非常灵活的计划模式,实用于需要动态选择算法的场景。通过封装算法,战略模式使得算法的变化不会影响到使用它的客户端代码。
相关文献
【知识科普】一篇文章教你学会计划模式
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
飞不高
论坛元老
这个人很懒什么都没写!
楼主热帖
Java集合的lastlastIndexOfSubList()方 ...
WPF开发经验-实现自带触控键盘的TextBo ...
如何在 K8S 集群范围使用 imagePullSec ...
【关系型数据库】事务特性及事务隔离级 ...
Python批量采集百度资讯文章,如何自定 ...
微信小程序集合3(百度小说+电商+仿哗 ...
MapReduce开发
瓦片地图
浅谈售前的业务思维
Navicat 连接服务器不成功(Access den ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
移动端开发
物联网
网络安全
MES
虚拟化与私有云
快速回复
返回顶部
返回列表