《Java与模式》读书笔记1(1-11)
《Java与模式》读书笔记1(1-11) 开闭原则
Open-Close Principle(OCP)
Softeware entities should be open for extension,but closed for modification.
里氏代换原则
Liskov Substitution Principle(LSP)
如果对每一个类为T1的对象o1,都有类为T2的对象o2,使得 以T1定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有变化,则类T2是类T1的子类。
关于父子类的关系,《墨子 小取》有喻:
“白马,马也。乘白马,乘马也。骊马,马也。乘骊马,乘马也。获,人也。
爱获,爱人也。臧,人也。爱臧,爱人也。此乃是而然者也。
rideHorse(Horse horse);->rideHorse(WhiteHorse whitehorse);
反之则不成立
获之亲,人也。获事其亲,非事人也。其弟,美人也。爱弟,非爱美人也。
车,木也。乘车,非乘木也。船,木也。乘船,非乘木也。盗.人也。多盗,非多
人也。无盗,非无人也。
依赖倒转原则
Dependence Inversion Principle(DIP)
Abstractions should noet depend upon details.
Details should depend upon abstractions.
接口隔离原则
Interface Segregation Principle(ISP)
使用多个专门的接口比使用一个单一的大接口要好
合成/聚合复用原则
Composite/Aggregate Reuse Principle(CARP)
合成是值的聚合
聚合是引用的聚合
迪米特法则
Law of Demeter(LoD)
or:Least Knowledge Principle(LKP)
某人->朋友->朋友的朋友
常使民无知无欲;鸡犬之声相闻,民至老死,不相往来