在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
三、 依赖倒置原则(DIP)依赖倒置(Dependence Inversion Principle)原则讲的是:要依赖于抽象,不要依赖于具体。 简单的说,依赖倒置原则要求客户端依赖于抽象耦合。原则表述: 抽象不应当依赖于细节;细节应当依赖于抽象; 反面例子: 解决办法一: 优点:ToggleSwitch依赖于抽象类Light,具有更高的稳定性,而BulbLight与TubeLight继承自Light,可以根据"开放-封闭"原则进行扩展。只要Light不发生变化,BulbLight与TubeLight的变化就不会波及ToggleSwitch。 缺点:如果用ToggleSwitch控制一台电视就很困难了。总不能让TV继承自Light吧。 解决方法二: 优点:更为通用、更为稳定。 结论: 四、 接口隔离原则(ISP)接口隔离原则(Interface Segregation Principle)讲的是:使用多个专门的接口比使用单一的总接口总要好。换而言之,从一个客户类的角度来讲:一个类对另外一个类的依赖性应当是建立在最小接口上的。 过于臃肿的接口是对接口的污染。不应该强迫客户依赖于它们不用的方法。 My object-oriented umbrella(摘自Design Patterns Explained) Let me tell you about my great umbrella. It is large enough to get into! In fact, three or four other people can get in it with me. While we are in it, staying out of the rain, I can move it from one place to another. It has a stereo system to keep me entertained while I stay dry. Amazingly enough, it can also condition the air to make it warmer or colder. It is one cool umbrella. My umbrella is convenient. It sits there waiting for me. It has wheels on it so that I do not have to carry it around. I don't even have to push it because it can propel itself. Sometimes, I will open the top of my umbrella to let in the sun. (Why I am using my umbrella when it is sunny outside is beyond me!) In Seattle, there are hundreds of thousands of these umbrellas in all kinds of colors. Most people call them cars. 实现方法: 五、 合成/聚合复用原则(CARP)合成/聚合复用原则(Composite/Aggregate Reuse Principle或CARP)经常又叫做合成复用原则(Composite Reuse Principle或CRP),就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新对象通过向这些对象的委派达到复用已有功能的目的。 简而言之,要尽量使用合成/聚合,尽量不要使用继承。 o Design to interfaces. 区分"Has-A"与"Is-A" "Is-A"是严格的分类学意义上定义,意思是一个类是另一个类的"一种"。而"Has-A"则不同,它表示某一个角色具有某一项责任。 导致错误的使用继承而不是合成/聚合的一个常见的原因是错误的把"Has-A"当作"Is-A"。 例如: 实际上,雇员、经理、学生描述的是一种角色,比如一个人是"经理"必然是"雇员",另外一个人可能是"学生雇员",在上面的设计中,一个人无法同时拥有多个角色,是"雇员"就不能再是"学生"了,这显然是不合理的。 错误源于把"角色"的等级结构与"人"的等级结构混淆起来,误把"Has-A"当作"Is-A"。解决办法:
六、 迪米特法则(LoD)迪米特法则(Law of Demeter或简写LoD)又叫最少知识原则(Least Knowledge Principle或简写为LKP),也就是说,一个对象应当对其它对象有尽可能少的了解。 其它表述: 迪米特法则与设计模式 使民无知 不相往来
参考文献: 阎宏,《Java与模式》,电子工业出版社 [美]James W. Cooper,《C#设计模式》,电子工业出版社 [美]Alan Shalloway James R. Trott,《Design Patterns Explained》,中国电力出版社 [美]Robert C. Martin,《敏捷软件开发-原则、模式与实践》,清华大学出版社 [美]Don Box, Chris Sells,《.NET本质论 第1卷:公共语言运行库》,中国电力出版社 http://www.dofactory.com/Patterns/Patterns.aspx |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论