Article
设计模式六大原则:金庸群侠传
· 5 分钟阅读
在金庸武侠的世界里,江湖中的武林高手武艺各异,却又各有所长。他们的成功不仅仅在于招式的精巧,更在于他们对武学核心原则的深刻理解和运用。就像设计软件系统一样,掌握了核心的设计原则,才能构建出灵活、可扩展、易维护的系统。设计模式中的六大原则,就如同武侠小说中的武林秘籍,为我们在设计复杂系统时提供了宝贵的指导。
六个原则各自约束什么
这六条经常被并列背诵,但它们管的事情并不一样。
前五条合起来是常说的 SOLID:单一职责和接口隔离约束的是边界划在哪里,开闭和依赖倒置约束的是变化发生时改哪一端,里氏替换约束的是替换之后行为是否还成立。迪米特法则不在 SOLID 里,它管的是另一件事——对象之间该知道多少。
把这六条放在一起看,会发现它们在互相牵扯。职责拆细了,接口自然变小,但对象之间的调用链会变长,迪米特法则就更容易被违背;依赖倒置引入的抽象层,又可能让”一个类只有一个变更理由”变得难以判断。所以真正难的从来不是背下这六条,而是在具体场景里判断这一刀该切在哪里。
逐条展开
每一篇都用一位金庸人物做引子,从定义讲到落地:
- 单一职责原则:独孤九剑的每一式只破一种兵器 —— 令狐冲的剑法里,每一式都有明确的对手;一个类也该只有一个变更理由。
- 开闭原则:像太极拳那样加招式,不改拳理 —— 张三丰面对新对手时调整的是招式组合,不是拳法根本;新需求应当靠扩展而非修改来满足。
- 里氏替换原则:子类换了父类,行为不能变 —— 郭靖换过师父、换过武功路数,但做人的底子没变;子类替换父类之后,程序行为也不该变。
- 依赖倒置原则:张无忌靠的是内力,不是招式 —— 九阳神功给的是内力根基,具体使什么招反而可以临场决定;高层模块该依赖抽象而非实现。
- 接口隔离原则:王语嫣懂天下武学,却不属于任何门派 —— 她通晓各派理论却不被任何一派的招式绑住;客户端不该依赖它用不到的方法。
- 迪米特法则:黄药师的独来独往 —— 他很少与人来往,反而少了很多牵制;一个对象该对其他对象知道得尽可能少。
怎么用
这六条不是检查清单,念一遍并不会让代码变好。它们更像是六把不同角度的尺子:写完一个模块之后,换一把量一量,往往能看出上一把量不出的问题。
真要挑一个入手点,我建议从单一职责开始——它最容易判断,也最容易在重构时立刻见效。其余的会在你拆过几次之后自然浮现。
Keep Reading