读TerryLee 2抽象工厂

抽象工厂模式提供了一个创建一系列相关或相互依赖对象的接口,运用抽象工厂模式的关键点在于应对“多系列对象创建”的需求变化。一句话,学会了抽象工厂模式,你将理解OOP的精华:面向接口编程。

看了TerryLee 的例子 自己加了一个

先定义两个抽象类

 

    public  abstract class Tax
    {
        
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();
    }

这个时候可以感觉到当时定义Tax,Bouns两个抽象类的好处了

实现我们自己的类

Code

当然我们要知道改实例化哪个工厂 方式很多。做好的方法当然是利用反射机制 因为这样可以提供代码隐蔽性 只用修改一下配置文件即可

修改一下抽象工厂添加一个静态方法来实例化工厂。 当然也可以独立出来

Code

客户端调用:

        AbstractFacory af = AbstractFacory.GetInstance();
            
double gz = af.CreateTax().GetTax();
            
double jj = af.CreateBonus().GetBonus();

这样客户端仅仅依赖的是抽象类 不用去管其他的东西

比如我要添加一新的业务只需要添加两个新的业务规则newTax,newBonus,以及一个newFactory 就OK了

最关键的是 不管添加或者修改 都不会影响到其他的业务

原文地址:https://www.cnblogs.com/bobofsj11/p/1506868.html