倒转依赖原则的实例(源码)

1.介绍:

      1.1依赖倒转原则:(DIP)

             定义一:高层模块不应依赖底层模块,二者都应依赖抽象;细节依赖抽象

            定义二:要针对接口编程,不要针对实现编程

            比如孕妇与龙凤胎,有孕妇,才能生龙凤胎,孕妇是抽象,龙凤胎(包括男婴,女婴)是实现。

      1.2 为什么要实现依赖倒转

            1.实现代码重用:比如切换数据库,无须重构代码

             2.作用:比如居民家中使用电视盒,以插口的方式进行网络链接,如果机房网络的连接发生变化,只需要在机房中进行变换,电视盒仍用原插口;

                            如果我们不使用插口来连接电视盒,直接与机房网络进行连接,则在网络方式发生变化事,需要重新改造线路。

                           接口大大提高了系统的扩展性与灵活性。

       1.3如何实现依赖倒转

              1.从实现类与抽象类的角度进行分析,我们在运用具体实现类与实现抽象类时,需要保证引用“基类”之处可以修改成其子类;

               2.从层次关系角度进行分析,需要定义清晰的层次关系,使每个层次通过接口的方式进行;

              3.从对象构造角度进行分析,如果创建的是动态的对象,则使用依赖倒转,如果创建的是一些静态的具体类并且变化率很低,则无须创建基类去继承,以规避维护多余

                           代码的风险。                                            


1.题目:

            公司人员包括管理层和业务员,因业务需要招聘两名程序员,请根据倒转依赖原则对公司人员管理进行设计,创建类图和代码

            分析:

                         定义管理层接口,编码接口,编码类,高级程序员类,普通程序员类

            类图

2.具体实现:

      2.1 管理层接口

 


package test3;

/**
 * 管理层接口
 */
public interface IEmployee {
    public String code(ICode code);
}
      2.2 编码接口

package test3;

/**
 * 编码接口
 */
public interface ICode {
    public String getRun(String Run);
}

       2.3 编码类

package test3;

/**
 * 编码类
 */
public class Code implements IEmployee{//程序员编码
    
    private static final String Run = "编码活动";
    
    @Override
    public String code(ICode iCode) {
        System.out.println(iCode+"程序员开始编码-----这是Code类");
        return iCode.getRun(Run);
    }
}


      2.4 高级程序员类


package test3;
/**
 * 高级程序员类
 */
public class SeniorProgrammer implements ICode {

    private static final String Run ="李四";
    
    @Override
    public String getRun(String Run1) {
        String Run2="高级的工作";
        System.out.println(Run+"高级程序员开始工作。----这是SeniorProgrammer类。。");
        return Run2;
    }
}


       2.5 普通程序员类


package test3;

/**
 * 普通程序员类
 */
public class CommonProgrammer implements ICode {

    private static final String Run = "张三";
    
    @Override
    public String getRun(String Run1) {
        String Run2 ="工作";
        System.out.println(Run+"普通程序员开始工作...-----这是CommonProgrammer类");
        return Run2;
    }
}


      2.6 测试类


package test3;

/**
 * 测试类
 */
public class Test {
    public static void main(String[] args) {
        IEmployee employee = new Code();
        
        ICode iCode = new SeniorProgrammer();
        //高级程序员张三开始编程
        System.out.println("----employee.code(code):"+employee.code(iCode));
        
        
        ICode iCode1 = new CommonProgrammer();
        //普通程序员李四开始编程
        System.out.println("管理人员张三派高级程序员李四"+employee.code(iCode1));
    }
}


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值