我和朋友讨论了运动设计问题,我们提出了不同的解决方案。我们正在学习OOPS概念,因此决定在此向专家展示我们的解决方案并获得他们的意见。
问题:衬衫的设计类。衬衫有不同的特征,如图案,大小,颜色等。
朋友的解决方案:
我的解决方案:
将会有具体的实现,例如,小型,中型,大型的尺寸。红色,蓝色,黄色为颜色。是不是使用Interfaces for Pattern,Size,Color是一种矫枉过正?多态性应该用于封装行为,但我以不同的方式使用它。
有些专家请告诉我们如何以面向对象的方式保持衬衫的不同特征?如果他们进来,如何处理新功能(例如阴影)?
答案 0 :(得分:3)
你朋友的想法很简单,我喜欢从简单的想法开始,并在需要时改进它们。另一方面,您的解决方案提供了极大的灵活性,您可以通过为每个变量使用接口类型而不是本机类型来最大限度地使用OOP。
关于你在处理新功能时提到的最后一件事,在两种设计中你都必须打开类进行修改,这不是一件好事,因为它违反了OCP原则(类应该是开放扩展,关闭以进行修改)。
我会通过让Shirt
类保持所有衬衫(如尺寸,颜色,价格或其他等)共有的属性来解决这个问题,并存储可能在HashMap
或PropertyList
中变化的其他特征AddFeature(name, value)
。
这提供了极大的灵活性,因为当新功能出现时,您只需调用HashMap
这样的方法,将该功能存储在{{1}}中。
我想说明一点,不要深入研究设计,让它耗费你的时间。而是从简单的想法开始,并在你继续改进它们。伟大的设计来自经验和对业务领域的仔细分析。