我想设计具有以下解决方案的软件:
a,b and d
。
_ 产品必须至少包含x个功能列表f,g and m
_产品的每个功能都有权重。让我说明最后一点:
让我们说产品 A
有关于必须具有a and b
功能的规则,必须至少有2个c, d, e and f
并且也可以拥有(但不是必须的) )功能g, h ,i and j
我还分配了以下权重a,b each equal 5
,c, d, e and f each equal 10
和g, h ,i and j each equal 2.5
。 (总共60分)
案例1:
类型a
的产品 A
具有a, c, d, h, j
功能。我想要以下报告:
不是A因为缺少b
。得分= 0.5((5 + 10 + 10 + 2.5 + 2.5)/ 60)
也可以收到b, e, f, g, i
案例2:
类型b
的产品 A
具有a, b, c, e, h, j
功能。我想要以下报告:
A.得分= 0.5833((5 + 5 + 10 + 10 + 2.5 + 2.5)/ 60)
也可以收到d, f, g, i
这是我到目前为止所得到的:
Products
和Features
应由factory
创建,以便在运行时生成并遵循相同的界面。
应使用strategy
模式生成报告。
你会推荐什么?
谢谢!
答案 0 :(得分:3)
域模型很有用(我想我根据你的文字做对了):
从那里,我没有看到足够的设计变化(例如,产品A
只是Product
类的实例,功能a
只是Feature
类的实例来证明模式的合理性。 IMO,甚至不需要工厂。我错过了你的问题吗?
答案 1 :(得分:1)
据我所知,你有对象运行相同的逻辑(报告,分数和缺失的功能)。但是您为每个对象设置了不同的设置,产品A的设置与产品B的设置不同。
然后我认为您可以检查设计模板模板:https://sourcemaking.com/design_patterns/template_method
它可以帮助您定义产品的不同规则。
答案 2 :(得分:1)
我假设产品会有文字输入,例如情况1的A,a,c,d,h,j。使用静态工厂的产品是很好的方法。使用策略生成报告是不正确的。如果您的策略上下文是产品,那么您是否有一个用例,其中Product-A在运行时更改为Product-B?我觉得不是。 (在不改变状态的情况下使用策略,存在算法族及其可互换性)。此处产品将包含规则和功能的不同组合,因此状态更改(无策略)。我想不需要额外的设计模式。
遵循OO设计将起作用。 Abstract-Product包含在Concrete Product构造函数中填充的规则集合。 Abstract-Product还包含在解析ext数据输入String时填充的功能集合。
功能被建模为枚举,权重为参数。
规则被建模为抽象类,抽象的“布尔检查()”具体规则覆盖。具体规则要求产品访问其特征集合,因此产品与规则是双向关联。
当通过静态工厂从ext输入String配置具体产品时,我们调用generateReport()方法,该方法迭代集合中的所有规则。每个规则应用规则并使用其特定消息(部分)更新违规字符串(如果违反)(例如,缺少特征b等)。 ConcreteProduct中的generateReport()会将报告消息合并到帐户违规消息中。
类似的权重计算方法,因为它仅取决于特征。 所以我猜只有静态工厂才足以作为设计模式。功能可以通过enum.ValueOf()实现。
在这里,我想间接地通过在Rule中使用check()实现generateReport(),在Product Hierarchy和Rule Hirrarchy之间使用Bridge Design模式。