zoukankan      html  css  js  c++  java
  • 读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了

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

  • 相关阅读:
    [LeetCode]Sort List
    [LeetCode]Single Number II
    合并两个排序的列表
    翻转链表
    链表中倒数第k个结点
    调整数组顺序使奇数位于偶数前面
    数值的整数次方
    二进制中1的个数
    矩形覆盖
    变态跳台阶
  • 原文地址:https://www.cnblogs.com/bobofsj11/p/1506868.html
Copyright © 2011-2022 走看看