• excel模板解析—桥接模式:分离解析模板和业务校验


    在做excel模板解析的时候,其实会有两个部分,第一,将模板读取出来,校验一些必录项等。 但除了这些,在数据真正被业务线使用的时候,还会有一些其他的校验,比如说:根据业务,年龄是不能超过多少岁的,包括一些属性,在数据库、业务中是以什么类型传输应用的。 而且,这两个部分,都会面临着变化,模板并非一成不变,业务校验,也不可能一成不变。 怎样设计,才可以适应这种变化呢?   


    科普:变化驱动——正交设计  PS:理解并不是很深刻,就不叨叨了

    为了应对这种随时可能面临的变化,引入了桥接模式,分离了一个模板的数据解析工作,和数据校验工作。 

    一、桥接模式

    桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。

    ●Abstraction(抽象类):用于定义抽象类的接口,它一般是抽象类而不是接口,其中定义了一个Implementor(实现类接口)类型的对象并可以维护该对象,它与Implementor之间具有关联关系,它既可以包含抽象业务方法,也可以包含具体业务方法。

    ●RefinedAbstraction(扩充抽象类):扩充由Abstraction定义的接口,通常情况下它不再是抽象类而是具体类,它实现了在Abstraction中声明的抽象业务方法,在RefinedAbstraction中可以调用在Implementor中定义的业务方法。

    ●Implementor(实现类接口):定义实现类的接口,这个接口不一定要与Abstraction的接口完全一致,事实上这两个接口可以完全不同,一般而言,Implementor接口仅提供基本操作,而Abstraction定义的接口可能会做更多更复杂的操作。Implementor接口对这些基本操作进行了声明,而具体实现交给其子类。通过关联关系,在Abstraction中不仅拥有自己的方法,还可以调用到Implementor中定义的方法,使用关联关系来替代继承关系。

    ●ConcreteImplementor(具体实现类):具体实现Implementor接口,在不同的ConcreteImplementor中提供基本操作的不同实现,在程序运行时,ConcreteImplementor对象将替换其父类对象,提供给抽象类具体的业务操作方法。

    二、具体应用

    在实际应用时,将具体的一些校验以工具类的形式实现。 毕竟,这是has a和is a的区别!

    具体的代码结构:

    三、总结

    这段内容很简单,但怎样做到从一开始就想到并做到,这是一个需要思考和总结的内容! 当系统这样设计后,如果我要增加一个模板,那么只需要增加一个类实例就可以,不管是读取还是业务校验,都是新增一个类,互不影响。  而抽离出来的工具类,可以服务于这些所有的模板。 

    PS:在最开始的时候,我的顶层接口,是用抽象类做的,后来改为了接口。 这是为什么呢?


  • 相关阅读:
    1004: 画图
    1002: 数字排序问题
    1003: 相邻数对问题
    1001: 图像旋转问题
    1000: 数塔
    springday05-go1
    springday04-go2
    springday04-go1
    springday03-go2
    Android—PopupWindow的简单使用
  • 原文地址:https://www.cnblogs.com/hhx626/p/8320397.html
Copyright © 2020-2023  润新知