Modèle de conception JavaScript Modèle de stratégie Partage de cas

avant-propos

Le modèle de conception de stratégie fait référence à un problème qui correspond à plusieurs solutions, dont une n'est pas nécessairement utilisée, et il est possible d'ajouter plusieurs solutions à tout moment

Par exemple, lorsque nous allons acheter des livres, la librairie organisera des activités promotionnelles, telles que 20 sur 100, 50 sur 200, 20% de réduction, etc., mais il y a plus que ces promotions, et des promotions seront ajoutées dans le à l'avenir, comme 30 % de réduction sur Double 11. Une fois l'événement Double 11 terminé, l'événement de réduction de 30 % doit être annulé.

Tout d'abord, nous n'utilisons pas le modèle de conception de stratégie pour implémenter le calcul du prix réduit. Nous déclarons une méthode qui accepte deux paramètres. L'un de ces deux paramètres est le prix et l'autre est le type de remise. Ensuite, utilisez l'instruction if dans la méthode pour déterminer le type de remise et calculer le prix. Si Pas de remise correspond au prix d'origine, puis renvoie le prix réduit calculé

?

1

2

3

4

5

6

7

8

9

dix

11

12

13

//price 价格

//type 折扣种类

 function calcPrice(price, type) {

            if (type == '100_20') {

                price -= 20

            } else if (type == '200_50') {

                price -= 50

            }

            return price;

        }

        // 使用

        const bookPrice = calcPrice(300, '100_20')

Cette méthode convient s'il y a relativement peu d'activités de remise, mais chaque fois que vous ajoutez une nouvelle activité de remise, vous devez ajouter l'instruction if de l'activité de remise à la méthode pour juger et mémoriser le champ du nouveau type de remise pour éviter le activité de remise précédente. Le nom est répété et l'instruction if doit être supprimée manuellement lorsque l'activité de remise expire. À long terme, le code est non seulement redondant mais également très facile à gérer

Implémenté à l'aide du modèle de conception de stratégie :

Nous déclarons une fonction de fermeture. Il y a un centre de type de remise dans la fonction de fermeture, qui contient plusieurs types de remise par défaut et une méthode pour calculer le prix de remise. Dans la méthode, nous définissons deux méthodes pour lui, l'une consiste à ajouter Le type de remise méthode, l'une consiste à supprimer la méthode de type de remise, puis à exposer la méthode de calcul de remise

?

1

2

3

4

5

6

7

8

9

dix

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

//计算折扣价格闭包函数

        const calcPrice = (function() {

            // 折扣种类中心

            const sale = {

           //100-20折扣活动

                    '100_20': function(price) {

                        return price -= 20

                    },

                    //200-50折扣活动

                    '200_50': function(price) {

                        return price -= 50

                    },

                    //打八折折扣活动

                    '80%': function(price) {

                        return price *= 0.8

                    },

                }

      

               /** *

               * 计算折扣价格

               * price 价格

               * type 折扣类型

               * **/

            function totalPrice(price, type) {

                // 判断折扣种类里面是否拥有这个折扣类型,如果有就执行,没有就返回原价

                if (sale[type]) {

                    // 使用折扣函数

                    price = sale[type](price)

                }

                // 返回价格

                return price

            }

            /**

             *

             *  添加折扣方法

             *  type  折扣类型

             * callback 折扣类型方法

             * **/

            totalPrice.add = function(type, callback) {

                    // 判断折扣类型是否存在

                    if (sale[type]) return '折扣已存在'

                    //给折扣类型中心添加折扣价格方法

                    sale[type] = callback

                    return '折扣方法添加成功'

                }

                // 删除折扣方法

                totalPrice.del(type){

                //通过delete关键字删除折扣类型中心方法

                   delete   sale[type]

                }

             // 被return出去的函数,才是计算价格的本体

            return totalPrice

        })();

        //使用计算价格

        const bookPrice = calcPrice(240, '200_50');

       //添加打七折折扣类型方法

       calcPrice.add('70%',function(price) { return price *= 0.7 })

       //删除打八折折扣类型方法

        calcPrice.add('80%')

Le modèle de conception de la stratégie est facile à maintenir, facile à comprendre et facile à développer

Je suppose que tu aimes

Origine blog.csdn.net/qq_15509251/article/details/131513595
conseillé
Classement