gpt4 book ai didi

design-patterns - 使用带有策略设计模式的工厂

转载 作者:行者123 更新时间:2023-12-04 07:21:02 25 4
gpt4 key购买 nike

好的,所以我被分配了一个任务,要求我同时使用策略和工厂设计模式。这是问题所在:

您正在为银行开发用于处理贷款的应用程序。有一个Loan带有方法的类capital() . capital()方法包含一个丑陋的 if-then-else 条件,它检查一些 Loan 对象实例属性并根据属性对贷款类型使用正确的策略。这是 capital() 的伪代码方法:

capital() {
if (expiry == null && maturity != null) {
// Find capital for term loan
return commitment * duration * riskFactor;
}
if (expiry != null && maturity == null) {
if (getUnusedPercentage() != 1.0) {
// Find capital for revolving loan
return commitment * unusedPercentage * duration * riskFactor;
} else {
// Find capital for complex loan
return (outstandingRiskAmount * duration * riskFactor) + (unusedRiskAmount * duration * unusedRiskFactor);
}
}
}

我们想在这个设计中引入策略模式。创建一个创建适当策略对象的工厂。使工厂成为单例类。绘制 UML 图并编写对应片段以替换 capital()方法。记住:使用策略的关键是:客户端应该提供一个上下文对象。

好的,所以我已经绘制了一个 UML 图。我对 Singleton 的理解非常扎实,所以我认为我已经理解了。我想我也非常了解战略。但是,我无法说服自己,我使用 Factory 创建 Strategy 对象的设置是解决此问题的最佳方法。 Check out my diagram here .我计划编写一个创建贷款的客户端对象,使用贷款作为上下文对象(通过 Loan 构造函数通过工厂创建它,使用适当的策略对其进行初始化)。 capital()然后方法将执行它已配置的任何策略。如果我的理解是正确的,我在这里设置工厂的方式是通过添加一个间接层来将贷款(上下文)与策略完全分离。

我不确定的一件事是如何获取在原始资本方法内部发生的计算过程中使用的数据。对于某些策略,仅使用少数参数(对于定期贷款,仅使用 promise 、期限和风险因素,但复杂贷款使用贷款的所有可用属性)。如果我的 calculateCapital()由所有策略实现的方法,所有六个属性都作为参数?

有没有更好的方法来使用带有策略模式的工厂来获得更好的结果?我应该改用 AbstractFactory 还是 Factory Method?

最佳答案

这是我对这个问题的解释和我的回答:

工厂必须制定适当的策略。只有知道贷款的性质,它才能做到这一点。因此,必须通过您喜欢的任何注入(inject)方法向工厂提供贷款,然后使用贷款的属性来决定返还哪种策略。

因此,现在您有了适合贷款类型的策略,您必须计算资本。同样,这取决于贷款的性质。因此,策略需要贷款。这可以通过工厂中的构造函数或通过 capital/calculateCapital 方法的参数注入(inject)。

这使它保持美观和简单,松散耦合和抽象。

就像是:

ICapitalStrategy s = LoanStrategyFactory.Create(loan);
s.CalculateCapital(loan);

关于design-patterns - 使用带有策略设计模式的工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13426761/

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