1
2using System;
3
4namespace FactorySalary
5{
6 /**//// <summary>
7 /// 客户端程序调用
8 /// </summary>
9 public class Calculator
10 {
11 public static void Main(string[] args)
12 {
13 Bonus bonus = new Factory().CreateBonus();
14 double bonusValue = bonus.Calculate();
15
16 Tax tax = new Factory().CreateTax();
17 double taxValue = tax.Calculate();
18
19 double salary = 4000 + bonusValue - taxValue;
20
21 Console.WriteLine("Chinaese Salary is:" + salary);
22 Console.ReadLine();
23 }
24 }
25}
26
不错,我们解决了一个大问题,设想一下:当该系统从中国企业移植到美国企业时,我们现在需要做什么?
答案是: 对于Caculator类我们什么也不用做。我们需要做的是修改Factory类,修改结果如下:
1using System;
2
3namespace FactorySalary
4{
5 /**//// <summary>
6 /// Factory类
7 /// </summary>
8 public class Factory
9 {
10 public Tax CreateTax()
11 {
12 return new AmericanTax();
13 }
14
15 public Bonus CreateBonus()
16 {
17 return new AmericanBonus();
18 }
19 }
20}
21
为系统增加抽象工厂方法
很显然,前面的解决方案带来了一个副作用:就是系统不但增加了新的类Factory,而且当系统移植时,移植工作仅仅是转移到Factory类上,工作量并没有任何缩减,而且还是要修改系统的源码。 从Factory类在系统移植时修改的内容我们可以看出: 实际上它是专属于美国企业或者中国企业的。名称上应该叫AmericanFactory,ChineseFactory更合适。
文章来源于领测软件测试网 https://www.ltesting.net/