• 依赖倒置原则(DIP)


    高层 不依赖 低层  实现不依赖细节,二者都依赖接口



    举例来说,如果设计一个软件来通过观察当前炉内的问题来控制火炉

    开关,可以把程序写成如下形式:

    public class Thermometer{

    private int getCurrentTemp;

    public int getGetCurrentTemp() {

    // TODO Auto-generated method stub

    return getCurrentTemp;

    }

    public void setGetCurrentTemp(int getCurrentTemp) {

    this.getCurrentTemp = getCurrentTemp;

    }

    }

    public class Furnace {

    private static final int MAX_TEMP = 500;

    private static final int MIN_TEMP = 100;

    public void engage() {

             DebugLog.log("too cold, open heater");

    }

    public void disengage() {

     DebugLog.log("too hot, close heater");

    }

    public void regulate(Thermometer meter)

    {

     if(meter.getGetCurrentTemp()<MIN_TEMP)

     this.engage();

     if(meter.getGetCurrentTemp()>MAX_TEMP)

     this.disengage();

    }

    }

    public class Test {

    /**

    * @param args

    */

    public static void main(String[] args) {

    Furnace furnace=new Furnace();

    Thermometer meter=new Thermometer();

    meter.setGetCurrentTemp(90);

    furnace.regulate(meter);

    meter.setGetCurrentTemp(510);

    furnace.regulate(meter);

    }

    }

    那如有有一天检测温度的Thermometer 变成xxx Thermometer ,将会导致

    Furnace 不能正常工作,我们都有一颗仁慈的心,当然希望世界和平。

    public class Furnace implements Heater {

    @Override

    public void engage() {

             DebugLog.log("too cold, open heater");

    }

    @Override

    public void disengage() {

     DebugLog.log("too hot, close heater");

    }

    }

    public class FurnaceController {

    public void regulate(Heater heater, Reader reader) {

    if (reader.getGetCurrentTemp() < Reader.TEMPERATURE.MIN_TEMP) {

    heater.engage();

    }

    if (reader.getGetCurrentTemp() > Reader.TEMPERATURE.MAX_TEMP) {

    heater.disengage();

    }

    }

    }

    public interface Heater {

       public void engage();

       public void disengage();

    }

     
     
    public interface Reader {
    public interface TEMPERATURE {
    int MAX_TEMP = 500;
    int MIN_TEMP = 100;
    }
     
    public int getGetCurrentTemp() ;
    public void setGetCurrentTemp(int getCurrentTemp);
    }
     
     
    public class Thermometer implements Reader{
     
     
    private int getCurrentTemp;
     
    @Override
    public int getGetCurrentTemp() {
    // TODO Auto-generated method stub
    return getCurrentTemp;
    }
     
    @Override
    public void setGetCurrentTemp(int getCurrentTemp) {
    this.getCurrentTemp = getCurrentTemp;
    }
     
    }
     
    public class Test {
     
    /**
    * @param args
    */
    public static void main(String[] args) {
    Heater heater=new Furnace();
    Reader reader=new Thermometer();
    reader.setGetCurrentTemp(90);
    FurnaceController controller=new FurnaceController();
    controller.regulate(heater, reader);
    reader.setGetCurrentTemp(506);
    controller.regulate(heater, reader);
    }
     
    }
    这样是不是就不用再担心添加这样的需求而整晚睡不好觉了。
     
  • 相关阅读:
    js之判断非空
    解决eclipse添加不了tomcat8的问题
    Java(eclipse)连接MySQL8.0以上版本数据库方式
    面试必备的:Redis和MongoDB的区别
    简述关系型数据库和非关系型数据库
    非关系型数据库MongoDB初探,以及和Redis的对比
    day53:django:URL别名/反向解析&URL分发&命名空间&ORM多表操作修改/查询
    day52:django:ORM单表/多表操作
    day51:django:dispatch&模板渲染&过滤器&标签&组件&静态文件配置
    day50:django:有名/无名分组&FBV/CBV
  • 原文地址:https://www.cnblogs.com/budoudou/p/2299674.html
Copyright © 2020-2023  润新知