zoukankan      html  css  js  c++  java
  • 依赖倒置原则(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);
    }
     
    }
    这样是不是就不用再担心添加这样的需求而整晚睡不好觉了。
     
  • 相关阅读:
    BlogEngine.Net
    加速Web开发的9款知名HTML5框架
    个人论坛博客的代码
    Android客户端调用Asp.net的WebService
    前端总结数据结构与算法基础
    node知识点及第三方模块
    消息轮播
    el-date-picker 组件时间格式化方式
    Vue+Element前端导入导出Excel
    vue单元测试
  • 原文地址:https://www.cnblogs.com/budoudou/p/2299674.html
Copyright © 2011-2022 走看看