大话设计模式-依赖倒置原则的最佳实践

依赖倒置原则(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。

/**
 * 总开关接口
 */
public interface ISwitchable {
    void TurnOn();

    void TurnOff();
}

 

/**
 * 可以控制所有电器的控制开关类
 */
public class ToggleSwitch implements ISwitchable {
    private ISwitchable iSwitchable;

    public ToggleSwitch() {
    }

    public ToggleSwitch(ISwitchable iSwitchable) {
        this.iSwitchable = iSwitchable;
    }

    public void setiSwitchable(ISwitchable iSwitchable) {
        this.iSwitchable = iSwitchable;
    }

    @Override
    public void TurnOn() {
        iSwitchable.TurnOn();
    }

    @Override
    public void TurnOff() {
        iSwitchable.TurnOff();
    }

    /**
     * 选择开还是关
     *
     * @param flag True 开  | False 关
     */
    public void Toggle(boolean flag) {
        if (flag) {
            this.TurnOn();

        } else {
            this.TurnOff();
        }
    }
}
/**
 * 具体的电器——灯
 */
public class Light implements ISwitchable {
    @Override
    public void TurnOn() {
        System.out.print("打开灯->");
    }

    @Override
    public void TurnOff() {
        System.out.print("关闭灯->");
    }
}
public class BulbLight extends Light {
    @Override
    public void TurnOn() {
        super.TurnOn();
        System.out.println(this.getClass().getName());
    }

    @Override
    public void TurnOff() {
        super.TurnOff();
        System.out.println(this.getClass().getName());
    }
}
public class TubeLight extends Light {
    @Override
    public void TurnOn() {
        super.TurnOn();
        System.out.println(this.getClass().getName());
    }

    @Override
    public void TurnOff() {
        super.TurnOff();
        System.out.println(this.getClass().getName());
    }
}
/**
 * 具体的电器——电视
 */
public class TV implements ISwitchable {
    @Override
    public void TurnOn() {
        System.out.println("打开电视");
    }

    @Override
    public void TurnOff() {
        System.out.println("关闭电视");
    }
}
public class Main {
    public static void main(String[] args) {
        //三个具体的电器对象
        ISwitchable bulbLight = new BulbLight();
        ISwitchable tubeLight = new TubeLight();
        ISwitchable tv = new TV();
        //开关控制类 可以控制上面三个电器
        ToggleSwitch toggleSwitch = new ToggleSwitch();
        toggleSwitch.setiSwitchable(bulbLight);
        toggleSwitch.Toggle(true);
        toggleSwitch.Toggle(false);
        toggleSwitch.setiSwitchable(tubeLight);
        toggleSwitch.Toggle(true);
        toggleSwitch.Toggle(false);
        toggleSwitch.setiSwitchable(tv);
        toggleSwitch.Toggle(true);
        toggleSwitch.Toggle(false);
    }
}

 

全部评论

相关推荐

暴走萝莉莉:这是社招场吧,作为HR说个实话:这个维护关系的意思是要有政府资源,在曾经的工作中通过人脉资源拿下过大订单的意思。这个有相关管理经验,意思也是真的要有同岗位经验。应酬什么的对于业务成交来说就算不乐意也是常态,就是要求说话好听情商高,酒量好。
点赞 评论 收藏
分享
10-09 00:50
已编辑
长江大学 算法工程师
不期而遇的夏天:1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务