语言知识——Java接口降低耦合度

首先提到一个关于简单人事管理系统架构的构思。

前端:

        Menu:前台界面显示,用switch根据用户输入调用不同的功能。

        InputData:用于处理用户输入的数据(字符串、数字、日期等不同格式处理),处理为想得到的数据形式(在PersonOperate中数据预处理时使用)。

        PersonOperate:选择不同的按键可调用的不同的功能(增删改查)Menu调用,通过调用InputData进行数据预处理,随后进行逻辑处理。

后端:

        Person:数据基础类,定义了数据属性和相关属性的读取操作。将每一条数据以该对象进行传输、处理。

        IPersonDAO(DataAccessConnection):接口,初始接口,用于抽象系统的基本处理方法(增删改查)。

        DataBaseConnection:数据库连接类,固定的数据库连接关闭操作。

        IPersonDAOProxy:采用了设计模式里的代理。其并不真正实现业务,但是安排业务,或而言之就是继承IPersonDAO接口,传输Person类数据,然后重写接口中方法,定义初步方法架构。具体就是连接数据库,还有异常捕获抛出等,同时调用具体增删改查方法(写在IPersonImpl类中)。

        IPersonImpl:IPersonDAOProxy类中处理方法的具体实现。也可以理解为代理分发任务给该类,该类进行细致处理。

        DAOFactory:设计模式中的工厂,程序中出现接口时需要解耦合,即完成“接口实例化”这一过程,该做法的好处具体在下面说明。

         接口泛指实体把自己提供给外界的一种抽象化物,用以由内部操作分离出外部「沟通方法」,使其能被内部修改而不影响外界其他实体与其交互的方式。(别人调用采用固定格式,而与自己内部逻辑无关。)

        比如,当企业需要把数据库从Oracle迁移到Mysql时,你只需要在配置文件中把Oracle换成MySQL即可。具体来说就是定义一个接口DataBase,之后无论是Oracle还是Mysql都继承这个接口DataBase实现,后续需要改或者切换时只需要实例化相应的实现类即可。

interface DataBase{
    void GoDataBase(){}
}
class MysqlService implements DataBase{
    void GoDataBase(){}
}
class OracleService implements DataBase{
    void GoDataBase(){}
}
class NosqlService implements DataBase{
    void GoDataBase(){}
}

class Run{

    void Do(DataBase database){
        // 传递参数为DataBase对象,所以其子类都可以作为对象传参
        // 因为目前我们不知道想做用那个数据库,想用时传递对应数据库即可
        GoDataBase(DataBase database); // 可以替换成
    }

    public static void main(String[] args){
        DataBase database;    
        // 
        // 想用哪种数据库,new 什么对象
        DataBase s1=new MysqlService();
        Do(s1)
    }
}

        这种做法的好处是:如果你直接声明MysqlService类,那如果业务变更所有MysqlService类的相关部分都需要跟着变更,如果删了MysqlService类那整体程序逻辑也会中断。但如果你采用了接口,假如依旧删除MysqlService或者OracleService,对于相关位置方法的调用并没有直接影响,且你也可以随意扩展一个新的类来实现DataBase接口。因为这主要取决于你传的对象是什么类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值