1、抽象工厂简介
在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时由于需求的变化,往往存在着更多系列对象的创建工作。
- 如何应对这种变化?
- 如何绕过常规的对象的创建方法(new)?
- 如何来避免客户程序和这种“多系列具体对象创建工作”的紧耦合?
然而抽象工厂便可以很好地解决这个问题!
2、意图
提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。
3、适用性
- 一个系统要独立与它的产品创建、组合和表示时
- 一个系统要由多个产品系列中的一个来配置时
- 当你要强调一系列相关的产品对象的设计以便进行联合使用时
- 当你提供一个产品类库,而只想显示它们的接口而不是实现时
4、结构图
5、应用实例
注:此案例,借鉴网络资料;比较易于学习,所以自己练习了下,在这里也给大家分享了!
中国企业需要一项简单的财务计算:每月月底,财务人员要计算员工的工资。
员工工资 = 基本工资 + 奖金 - 个人所得税 ; 为了简化系统,这里定义员工基本工资:4000
中国企业奖金和个人所得税的计算规则是:
奖金 = 基本工资 * 10%
个人所得税 =(基本工资 + 奖金) * 40%
为此我们要构造一个系统,满足中国企业的需要:(名称Softo)
/// <summary> /// 公用变量基本工资 /// </summary> public class Constant { public static double base_salary = 4000; } /// <summary> /// 计算中国个人奖金 /// </summary> public class ChinaBonus { public double Calculate() { return Constant.base_salary * 0.1; } } /// <summary> /// 计算个人所得税 /// </summary> public class ChinaTax { public double Calculate() { return (Constant.base_salary + Constant.base_salary * 0.1) * 0.4; } }