Maison >développement back-end >Tutoriel C#.Net >Qu'est-ce que le modèle de fabrique simple C# ?

Qu'est-ce que le modèle de fabrique simple C# ?

零下一度
零下一度original
2017-06-23 16:18:402345parcourir

Titre : Créez un petit programme pour le caissier d'un centre commercial. Les situations possibles incluent : les frais normaux, 10 % de réduction, 30 % de réduction, 50 de réduction pour les achats supérieurs à 300, etc. Les différentes promotions sont susceptibles de changer à tout moment.

L'interface est la suivante :

Analyse :

Tout d'abord, nous écrivons une classe parent CashSuper pour collecter de l'argent. Cette classe parent est utilisée pour inclure diverses autres méthodes de facturation : recharge normale, 30 % de réduction, 20 % de réduction, 10 % de réduction, 50 % de réduction pour les achats de plus de 300, 70 % de réduction pour les achats de plus de 400, 100 % de réduction pour les achats de plus de 500. , etc., parmi lesquels des remises sont accordées Bien que différents, les types sont similaires et les remises complètes sont les mêmes. Par conséquent, nous pouvons diviser les frais normaux, les offres de remise et les offres de remise complète en trois catégories différentes : CashNormal, CashRebate et. Retour en espèces.

La classe parent CashSuper est utilisée pour l'héritage, nous la définissons donc sur abstract pour la réécriture. Deuxièmement, les trois sous-classes contenues dans cette classe parent appelleront toutes ensemble un paramètre : c'est le prix réel des marchandises. doit être reçu, nos paramètres doivent donc uniquement transmettre le paramètre commun : acceptMoney.

1 abstract class CashSuper2     {3         public abstract double acceptCash(double acceptMoney);4     }

Ensuite, il y a la facturation normale : CashNormal

Tout d'abord, le paramètre qu'il obtient de la classe parent est le prix du produit réel dont il a besoin à recevoir. Il ne facture pas de frais normaux, il suffit donc de renvoyer la valeur transmise par la classe parent.

1     class CashNormal : CashSuper2     {3         public override double acceptCash(double acceptMoney)4         {5             return acceptMoney;6         }7     }

Remise : CashRebate

C'est similaire à la facturation normale. Il hérite de la classe parent CashSuper et obtiendra les paramètres de la classe parent pour obtenir le. prix réel du produit, mais ce qu'il doit obtenir, c'est une remise sur le produit, il doit donc définir lui-même un paramètre de remise, de sorte que lorsque d'autres l'appellent, ils transmettent le paramètre de remise et qu'il puisse donner son avis. sur la remise sur le prix initial aux utilisateurs.

 1     class CashRebate : CashSuper 2     { 3         //这就是cashrebate的属性了 4         private double monRebate = 1; 5  6         //调用CashRebate的时候需要从外面将优惠程度传进来 7         public CashRebate(string moneyRebate) 8         { 9             this.monRebate = double.Parse(moneyRebate);10         }11 12         public override double acceptCash(double acceptMoney)13         {14             return acceptMoney * monRebate;15         }16     }

Remise complète : CashReturn

C'est similaire à l'offre de remise, sauf qu'elle a deux paramètres : la ligne horizontale de remise complète et la montant de la remise. Par conséquent, définissez simplement deux paramètres pour cette classe.

 1     class CashReturn : CashSuper 2     { 3         //这就是cashreturn的属性了 4         private double CashLevel = 0; 5         private double MoneyReturn = 0; 6  7         //对外调用函数所以必须是public 8         public CashReturn(string level,string MonReturn) 9         {10             this.CashLevel = double.Parse(level);11             this.MoneyReturn = double.Parse(MonReturn);12         }13 14         public override double acceptCash(double acceptMoney)15         {16             double result = acceptMoney;17             if (acceptMoney >= CashLevel)18             {19                 result = acceptMoney - Math.Floor(acceptMoney / CashLevel) * MoneyReturn;20             }21             return result;22         }23     }

Maintenant, nous avons plusieurs réductions, mais nous devons juger quand appeler quelle réduction. À cet égard, nous transmettons le choix de l'utilisateur, et l'utilisateur choisira la réduction après. la méthode est transmise, nous déterminons ensuite quelle méthode préférentielle appeler. Il s'agit d'utiliser le mode usine simple pour encapsuler toutes les méthodes préférentielles et les appeler davantage.

 1     class CashFactory 2     { 3         //CashSuper现在就类似double之类,返回值就是CashSuper 4         public static CashSuper createCashAccept(string type) 5         { 6             CashSuper cs = null; 7  8             switch (type) 9             {10                 case "正常收费":11                     cs = new CashNormal();12                     break;13                 case "满300减50":14                     cs = new CashReturn("300", "50");15                     break;16                 case "满500减100":17                     cs = new CashReturn("500", "100");18                     break;19                 case "满400减70":20                     cs = new CashReturn("400", "70");21                     break;22                 case "满900减200":23                     cs = new CashReturn("900", "200");24                     break;25                 case "八折优惠":26                     cs = new CashRebate("0.8");27                     break;28                 case "九折优惠":29                     cs = new CashRebate("0.9");30                     break;31                 case "七折优惠":32                     cs = new CashRebate("0.7");33                     break;34             }35             return cs;36         }37     }

Enfin, appelez la fonction ci-dessus dans l'interface utilisateur.

 1         private void ok_button_Click(object sender, EventArgs e) 2         { 3             /**对外这边需要了解两个函数 4              * 1.CashFactory.createCashAccept,这个是为了确定每一次的购物时调用的哪一种优惠方式 5              * 2.csuper.acceptCash,这个是为了获得每种优惠方式获得的优惠结果 6              */ 7             CashSuper csuper = CashFactory.createCashAccept(typecomboBox.SelectedItem.ToString()); 8              9             totalPrices = csuper.acceptCash(double.Parse(unitPrice_textBox.Text) * double.Parse(amount_textBox.Text));10             total += totalPrices;11             listBox1.Items.Add("单价:" + unitPrice_textBox.Text.ToString() + " 数量:" + amount.ToString() + "  " + typecomboBox.SelectedItem.ToString() + " 合计:" + totalPrices.ToString());12             resultLabel.Text = total.ToString();13         }

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn