设计六原则

开闭原则(核心)

Open Close Principle
理论:对扩展开放,对修改关闭(Open for extension)
实践:尽量使用接口和抽象类(Cloded for modification)

《第三回 四海千山皆拱伏 九幽十类尽除名》
腾讯视屏《太白金星启奏希望能降旨诏安,和平降服美猴王孙悟空》53“无广告
玉帝道:“那路神将下界收伏?”

言未已,班中闪出太白长庚星俯伏启奏道:“上圣三界中,凡有九窍者,皆可修仙。奈此猴乃天地育成之体,日月孕就之身,他也顶天履地,服露餐霞,今既修成仙道,有降龙伏虎之能,与人何以异哉?臣启陛下,可念生化之慈恩,降一道招安圣旨,把他宣来上界,授他一个大小官职,与他籍名在箓,拘束此间。若受天命,后再升赏;若违天命,就此擒拿。一则不动众劳师,二则收仙有道也。”

玉帝闻言甚喜,道:“依卿所奏。”即着文曲星官修诏,着太白金星招安。

|--“不动众劳师”,是闭;“收仙有道”,是开。

|--给孙悟空一个弼马温的管制,既可以使天庭系统适应新的变化(需求变更),又不改变原有的秩序。

|--在面向对象设计中的体现是:不允许改变抽象层,可以扩展实现层。

里氏代换原则

Liskov Substitution Principle, LSP

理论:子可代父(子类对象可以替换父类对象)
父类替换成子类,程序的行为没有变化,所以父类可以代表任何子类---体现其可重用性

实践:以父类名义声明子类对象

List<String> list = new ArrayList<>();

子类和父类是【is a的关系】

《第三回 四海千山皆拱伏 九幽十类尽除名》
悟空执着如意棒,径登森罗殿上,正中间南面坐下。十王即命掌案的判官取出文簿来查。

那判官不敢怠慢,便到司房里,捧出五六簿文书并十类簿子,逐一查看。臝虫、毛虫、羽虫、昆虫、鳞介之属,俱无他名。

又看到猴属之类,原来这猴似人相,不入人名;似臝虫,不居国界;似走兽,不伏麒麟管;似飞禽,不受凤凰辖。另有个簿子……悟空拿过簿子,把猴属之类,但有名者一概勾之。

显然,地府掌管生灵,用的是“分门别类”的方法,孙悟空是要销自己“天产石猴”的生死簿,结果销了所有猴类的生死簿,所以“天产石猴”的也销了——父类代表子类。

随着属性的增加,此原则可能被打破。

依赖倒转原则(基础)

Dependence Inversion Principle

理论:抽象不应该依赖细节,细节应该依赖抽象——即对接口编程,而不是对实现编程。

接口隔离原则

Interface Segregation Principle

理论:使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。

interface 羽 {
}
interface 飞 {
}
class 鸵鸟 implements 羽 {
}
class 麻雀 implements 羽, 飞 {
}

迪米特法则(最少知道原则)

Demeter Principle

理论:各模块尽量独立。

《黄飞鸿——狮王争霸》

爱奇艺《黄飞鸿之三:狮王争霸》01'13"无广告

李大人,所谓胜者为王,败者为寇,刚才天炮一响,如果没有天灯挡枪的话,胜负归谁还真没人知道。现在金牌在我黄某的手上,并非我赢了,大人为了大显我民神威而办的这场狮王争霸,死伤这么多人,在世人面前,其实我们都输了。
以小民之见,我们不只要练武强身,以抗外敌,最重要的还是广开民智,智武和一,那才是国富民强之道。区区一个牌子,能否改变国运,还请李大人三思,这金牌留给您作纪念吧。告辞了!

合成复用原则

Composite Reuse Principle

理论:尽量使用合成/聚合的方式,而不是使用继承(继承毕竟有耦合,父类改了子类就要改)。
实践:Service层调用Dao层,有一个Dao对象的变量,而不是继承Dao。

class Dao {
}
class Service /* extends Dao */{
	Dao _dao;
}
原文地址:https://www.cnblogs.com/tigerlion/p/10662645.html