我应该使用哪种设计模式?为什么?

时间:2017-06-25 11:16:25

标签: design-patterns gang-of-four

药房销售来自不同生产商的药品。每种药都有名称,类型(抗生素,抗炎,胃),价格等。但是,进口药必须有来自当前国家实验室的证书。此外,如果客户购买进口药品,药房工作人员必须查询药品数据库,并查看国内生产商(通常更便宜)的对口药品数据。

我们如何开发一个班级结构来处理这家药房的医药数据?

1 个答案:

答案 0 :(得分:0)

我发现Craig Larman的Applying UML and Patterns是一本非常好的书,可以学习设计,模式和实现。

如果你想要一个更快的解决方案,而不是阅读整本书,只需要原型:创建一些类,找出你的界面将是什么等等。尝试一些东西,看看哪些是最容易实现/维护的。

可能性:
您的ProductService有一个FindCounterpartMedicines()。如果你问题中描述的情况是唯一的特殊情况,那么只需要一个简单的if即可实现:如果没有必要,请不要复杂化,但“做最简单的事情可能有效“(link)。

if (medicine.IsImported) {
    result.CounterPartMedicines = FindCounterpartMedicines(medicine);
}

如果每种药物都有一些不同的特殊逻辑,你可以使用多态来避免列表

if (medicine.SomeProp) doSomePropLogic();
if (medicine.SomeOtherProp) doSomeOtherPropLogic();

继承示例

interface Medicine {
    BeforeBuyLogic();
}

class Antibiotics : Medicine {
    BeforeBuyLogic() {
        // check doctor subscription
    }
}

class StomachMed : Medicine {
    BeforeBuyLogic() {
        // check customer allergies
    }
}