很多创业公司都对外宣称“扁平化管理”,什么是“扁平化管理”呢?请看下面这张架构图:
因为人少,老板直接管理着采购、销售、人力跟 IT 等人员,虽然累了点,但部门少、人不多也还好。
但是随着公司规模发展,每次新加入人员老板都要去认识、沟通,出现问题还得去约出去喝个茶,老板发现自己的时间都浪费在这些琐事,容易耽搁事不说,还发挥不出更大价值。
这时他决定招一些经理替自己分别管理各个部门,自己只要管理这些经理就好了。
于是新的架构图是这样的:
老板这下子省心多了,有问题直接找部门经理就好了。至于哪个部门有召新人、或者员工不好好干开除了,他都不用操心。
传统软件开发中,类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成。这种场景下,类A一般是高层模块,负责复杂的业务逻辑;类B和类C是低层模块,负责基本的原子操作;假如修改类A,会给程序带来不必要的风险。参考自这里
这对应创业初期公司的“扁平化”,老板就是高层类A,高层一旦对低层的具体有依赖,将来低层变动 时高层就需要修改,这很类,也容易出错。
而老板负担能够减轻,正是依赖倒置原则的作用。
高层模块不应该依赖具体底层模块,两个都应该依赖接口。简单的说就是面向接口编程,而不是面向具体实现。
任何变量都不应该持有一个指向具体类的指针或引用。
在实际编程中,我们一般需要做到如下3点:
- 低层模块尽量都要有抽象类或接口,或者两者都有。
- 变量的声明类型尽量是抽象类或接口。
- 使用继承时遵循里氏替换原则。
依赖倒置有三种方式来实现
- 通过构造函数传递依赖对象;
比如在构造函数中的需要传递的参数是抽象类或接口的方式实现。
- 通过setter方法传递依赖对象;
即在我们设置的setXXX方法中的参数为抽象类或接口,来实现传递依赖对象。
- 接口声明实现依赖对象,也叫接口注入;
即在函数声明中参数为抽象类或接口,来实现传递依赖对象,从而达到直接使用依赖对象的目的。
依赖倒置原则的核心就是要我们面向接口编程,理解了面向接口编程,也就理解了依赖倒置。
感谢
《大话设计模式》
http://blog.csdn.net/imyfriend/article/details/7465596
http://blog.csdn.net/zhengzhb/article/details/7289269
时间: 2024-10-19 16:17:29