【发布时间】:2016-11-14 17:31:49
【问题描述】:
我们的项目中有 3 种类型的属性:CategoryAttribute、ProductAttribute 和 ProductTypeAttribute。这些不在我们的控制范围内,因为它们来自自动生成的类,并且可能包含不同类型的属性值,例如文字、数字或图片。现在,每个属性都有自己的策略来检索属性值。为简单起见,我们假设它们都具有 TextStrategy、NumberStrategy 和 ImageStrategy。
示例策略:
@Component
public class CategoryImageAttributeStrategy implements CategoryAttributeStrategy {
@Override
public boolean isApplicable(CategoryAttribute attribute) {
return attribute.getImage() != null;
}
@Override
public Object getAttributeValue(CategoryAttribute attribute) {
//return attribute value here
//may be different or may be the same
//for ProductImageAttributeStrategy and ProductTypeImageAttributeStrategy
}
}
虽然获取图像值可能对所有人都不同,但获取文本值是相同的,我们最终得到 3 类几乎相同的代码,我真的真的很不喜欢重复代码。
我考虑为每种策略类型创建一个抽象类/默认接口,例如DefaultTextStrategy ,所有 3 个文本策略都将从继承并使用提供更高的默认代码或用自己的实现覆盖它,但是我对这种方法并不满意,因为它需要为此类创建更多类一个简单的任务。
也许甚至可以将相同类型(例如图像)的策略组合成一个?
我真的很想听听更有经验的人在这件事上怎么说,因为我想学习和改进。
提前感谢您的宝贵时间。
【问题讨论】:
标签: java spring oop design-patterns strategy-pattern