设计原则之依赖反转原则


动机:当类里面含有属性类,如果直接写类,代码太死,可以考虑将属性类变成接口,方便扩展。

结论:高级类不直接使用低级类,使用接口作为抽象层。Creational Design Patterns可以帮助我们实现依赖反转原则,比如工厂模式,抽象工厂模式,原型模式。


Bad Example:

缺点:

    1、当出现一个新的工人superWorker,不得不修改Manager的源代码

    2、Manger里面已经存在的代码也会被影响,比如方法里面用到Worker

class Worker {

    public void work() {

        //working

    }

}

class Manager{

    Work worker;



    public void setWorker(Worker w) {

        worker = w;

    }


    public void manage() {

        worker.work();

    }

}


class SuperWorker {

    public void work() {

        //.... working much more

    }

}


Good Example:

    好处:

        1、添加superWorker不需要修改Manager类

        2、对Manager最小的修改风险

interface IWorker {

    public void work();

}


class Worker implements IWorker{

    public void work() {

        // ....working

    }

}


class SuperWorker  implements IWorker{

    public void work() {

        //.... working much more

    }

}


class Manager {

    IWorker worker;


    public void setWorker(IWorker w) {

        worker = w;

    }


    public void manage() {

        worker.work();

    }

}