什么是设计模式?为什么需要学习设计模式?
学习设计模式的目的是:要重复使用代码,使代码更易于被他人理解并确保代码的可靠性。设计模式使代码能够编写真实的工程;设计模式是软件工程的基石,就像建筑物的结构一样。
有23种经典的设计模式,但并非经常使用每种设计模式。在这里,介绍最常用和最实用的设计模式。本文首先介绍策略模式。
策略模式是一种行为设计模式,该模式定义了一系列算法,该算法封装了每种算法并允许它们相互替换。策略模式更改了独立于客户使用它的算法,也称为策略模型。
如果您正在开发在线购物中心,则每种产品都有原始价格,但实际上,并非所有产品都是以原始价格出售的,并且允许折扣以折扣价出售产品的促销活动可能会推出。
商人可以在后台为产品设置不同的状态,然后将根据产品状态和原始价格动态调整实际价格。
具体规则如下:
目前,您需要编写一个功能才能获得产品的价格。我应该如何写它?
实际上,面对此类问题,如果您不考虑任何设计模型,则最直观的写作可能是确定的多种条件来计算价格。
有三个状态可以快速编写以下代码:
有三个条件。上述代码编写了三个句子。这是一个非常直观的代码,但是此代码不好。
首先,它违反了单一责任原则。它规定每个类或函数应具有一个函数,并且该函数应被此类或函数完全封装)。函数做了太多事情。此功能不容易读取和容易出现。如果出现条件,整个功能将崩溃。在同一时间,此类代码不容易调试。
而且该代码很难满足变更的需求。目前,需要考虑设计模式,并且在业务逻辑变化时通常显示出其魅力。
假设业务扩大了,还有另一个折扣促销:黑色星期五。折扣规则如下:
现在如何扩展功能?
它看起来像是在该功能中添加条件语句:
每当增加或减少时,就需要更改功能。这种方法违反了打开和关闭的原则(打开和打开,并关闭修改)。对现有功能进行修改很容易遇到新错误,并且会导致它会导致它越来越肿。
那么如何优化此代码?
首先,可以分开此功能以减少腹胀。
修改后,尽管代码行的数量增加了,但可读性已得到显着提高。该功能显然不是那么肿,并且测试单元测试更加方便。
但是,上述更改尚未解决基本问题:代码仍然已满,当它增加或减少折扣规则时,它仍然需要修改。
实际上,使用它们的目的是与状态和折扣策略相对应。
可以从数字中可以找到该逻辑本质上是映射关系:产品状态和折现策略之间的映射关系。
您可以使用映射而不是冗长的存储映射。根据这个想法,您可以构建价格策略的映射关系(策略名称和处理功能之间的映射),如下:
将状态与折扣策略相结合,可以优化价格功能,如下所示:
目前,如果您需要添加或减去折扣策略,则无需修改功能,只需要修改价格策略映射关系
以前的代码逻辑如下:
优化的代码逻辑如下:
上述优化策略是使用设计模式的策略模型,在实际项目开发过程中,这仍然更加实用。
在什么情况下,我们可以考虑使用策略模式?如果该功能具有以下特征:
然后,您可以将每个判断条件下的代码封装到独立的功能中,然后建立判断条件和特定策略的映射关系。
原始:https://juejin.cn/post/7113451841001619463