抽象工厂模式提供了一个创建一系列相关或相互依赖对象的接口,运用抽象工厂模式的关键点在于应对“多系列对象创建”的需求变化。一句话,学会了抽象工厂模式,你将理解OOP的精华:面向接口编程。
看了TerryLee 的例子 自己加了一个
public abstract class Tax
{
public abstract double GetTax();
}
public abstract class Bonus
{
public abstract double GetBonus();
}
{
public abstract double GetTax();
}
public abstract class Bonus
{
public abstract double GetBonus();
}
为什么要定义这两个类呢?
一个维护性良好的系统应该遵循“开闭原则”。即:封闭对原来代码的修改,开放对原来代码的扩展(如类的继承,接口的实现)
这相当于定义了两个接口 后面不管哪种业务都可以继承
重写这两个抽象类的方法:
Code
为了方便调用不同的业务切换 我们需要一个工厂 当然我们可以把他抽象出来
public abstract class AbstractFacory
{
public abstract Tax CreateTax();
public abstract Bonus CreateBonus();
}
{
public abstract Tax CreateTax();
public abstract Bonus CreateBonus();
}
这个时候可以感觉到当时定义Tax,Bouns两个抽象类的好处了
实现我们自己的类
Code
当然我们要知道改实例化哪个工厂 方式很多。做好的方法当然是利用反射机制 因为这样可以提供代码隐蔽性 只用修改一下配置文件即可
修改一下抽象工厂添加一个静态方法来实例化工厂。 当然也可以独立出来
Code
客户端调用:
AbstractFacory af = AbstractFacory.GetInstance();
double gz = af.CreateTax().GetTax();
double jj = af.CreateBonus().GetBonus();
double gz = af.CreateTax().GetTax();
double jj = af.CreateBonus().GetBonus();
这样客户端仅仅依赖的是抽象类 不用去管其他的东西
比如我要添加一新的业务只需要添加两个新的业务规则newTax,newBonus,以及一个newFactory 就OK了
最关键的是 不管添加或者修改 都不会影响到其他的业务