C# 단순 팩토리 패턴이란 무엇입니까?

零下一度
풀어 주다: 2017-06-23 16:18:40
원래의
2322명이 탐색했습니다.

제목: 쇼핑몰 계산원을 위한 작은 프로그램을 만들어 보세요. 가능한 상황은 다음과 같습니다: 일반 요금, 10% 할인, 30% 할인, 300개 이상 구매 시 50% 할인, 기타 다양한 할인은 언제든지 변경될 수 있습니다. 시간.

인터페이스는 다음과 같습니다:

분석:

먼저 돈을 모으기 위한 상위 클래스 CashSuper를 작성합니다. 이 상위 클래스는 다양한 기타 충전 방법을 포함하는 데 사용됩니다. 일반 충전, 30% 할인, 20% 할인, 10% 할인, 300개 이상 구매 시 50% 할인, 400개 이상 구매 시 70% 할인, 500개 이상 구매 시 100% 할인 등을 제공하고 있으며, 그 중 할인이 제공되는 방식은 다르지만 종류는 유사하며, 전액할인은 동일하므로 일반요금, 할인혜택, 전액할인은 CashNormal, CashRebate, 총 3가지로 구분할 수 있습니다. 현금반환.

부모 클래스 CashSuper는 상속에 사용되므로 다시 작성하기 위해 추상화로 설정했습니다. 둘째, 이 부모 클래스에 포함된 세 개의 하위 클래스는 모두 하나의 매개변수를 함께 호출합니다. 이것이 실제로 수신되어야 하는 값입니다. 제품이므로 매개변수는 공통 매개변수인 acceptMoney만 전달하면 됩니다.

1 abstract class CashSuper2     {3         public abstract double acceptCash(double acceptMoney);4     }
로그인 후 복사

그리고 일반 충전이 있습니다: CashNormal

우선 상위 클래스에서 가져오는 매개변수는 실제로 받아야 하는 제품의 가격이며 일반 충전에 대한 할인은 없습니다. 그래서 상위 클래스에서 전달된 값을 직접 반환합니다.

1     class CashNormal : CashSuper2     {3         public override double acceptCash(double acceptMoney)4         {5             return acceptMoney;6         }7     }
로그인 후 복사

할인: CashRebate

상위 클래스 CashSuper에서 상속받은 것과 유사하며, 수신해야 하는 실제 제품의 가격을 가져옵니다. 구현해야 할 것은 제품 요금을 청구하는 것입니다. 할인을 실행하려면 할인 매개변수를 직접 정의해야 합니다. 그래야 다른 사람이 전화할 때 할인 매개변수가 전달되고 할인을 통해 사용자에게 할인을 피드백할 수 있습니다. 원래 가격.

 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     }
로그인 후 복사

전액 할인 할인: CashReturn

전액 할인의 가로선과 할인 금액이라는 두 가지 매개변수가 있다는 점을 제외하면 할인 제안과 유사합니다. 따라서 이 클래스에 대해 두 개의 매개변수만 정의하십시오.

 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     }
로그인 후 복사

이제 몇 가지 할인이 있지만 언제 어떤 할인을 호출할지 결정해야 합니다. 이를 위해 사용자의 선택을 전달하고 사용자는 선택한 할인 방법을 전송한 다음 어떤 것을 호출할지 결정합니다. 우선 메소드는 단순 팩토리 모드를 사용하여 모든 우선 메소드를 캡슐화하고 추가로 호출하는 것입니다.

 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     }
로그인 후 복사

마지막으로 사용자 인터페이스에서 위 함수를 호출하면 됩니다.

 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         }
로그인 후 복사

위 내용은 C# 단순 팩토리 패턴이란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿