gpt4 book ai didi

c# - 策略模式电影条件从主类内部到客户端代码,那么有什么意义呢?

转载 作者:行者123 更新时间:2023-11-30 16:43:53 27 4
gpt4 key购买 nike

我试图理解策略模式,这里有一个例子,我们有一个Customer,它有一个方法GetDiscount,这个方法写成如下

GetDiscount
If (Condition1)
Return 10%
else (Condition2)
Return 20%

现在我已经使用策略模式重构了代码,所以它变成了

GetDiscount
Invoke the attached strategy

并且我们创建了两个策略类10%Strategy20%Strategy来封装打折的行为

对于使用客户类的客户端代码,它变成了

c = new Customer

if(condition1)
c.attach(10%Strategy)
else (condition2)
c.attach(20%Strategy)

c.GetDiscount

因此,正如您所看到的,我们已经将 Customer 类内部的条件转移到客户端代码中,不仅如此,而且这个条件分支本身被认为是一种业务逻辑,我们让它泄漏到例如,可能是表示 Controller 的客户端代码。

我错过了什么吗?

最佳答案

在使用面向对象技术开发的大型软件系统中,您有组装对象的代码,以及使用组装对象的代码。在您的情况下,调用 attach 的代码正在组装 Customer 对象供以后使用,调用 GetDiscount 的代码是利用对象。

策略模式实现的目标是将Customer 获得折扣的决策从对象的使用点转移到对象的组装点。条件保留在您的代码中,但现在仅限于您创建 Customer 对象的地方。

组装完成后,Customer 对象就可以自给自足了。不再需要用于计算 10% 或 20% 折扣条件的数据,因为它嵌入在折扣类型中。计算折扣的逻辑遵循 Customer 到代码中的不同位置。您可以使用折扣计算而无需在多个地方复制逻辑 - 例如,计算销售总价、预览单个商品的价格、处理返回等。当多次需要计算时,这还可以避免重复相同的逻辑。

关于c# - 策略模式电影条件从主类内部到客户端代码,那么有什么意义呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44131599/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com