博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计六原则
阅读量:5260 次
发布时间:2019-06-14

本文共 1618 字,大约阅读时间需要 5 分钟。

开闭原则(核心)

Open Close Principle

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

《第三回 四海千山皆拱伏 九幽十类尽除名》

玉帝道:“那路神将下界收伏?”

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

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

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

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

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

里氏代换原则

Liskov Substitution Principle, LSP

理论:父类可以出现的地方,子类一定可以出现

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

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

List
list = new ArrayList<>();

《第三回 四海千山皆拱伏 九幽十类尽除名》

悟空执着如意棒,径登森罗殿上,正中间南面坐下。十王即命掌案的判官取出文簿来查。

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

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

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

依赖倒转原则(基础)

Dependence Inversion Principle

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

接口隔离原则

Interface Segregation Principle

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

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

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

Demeter Principle

理论:各模块尽量独立。

《黄飞鸿——狮王争霸》

李大人,所谓胜者为王,败者为寇,刚才天炮一响,如果没有天灯挡枪的话,胜负归谁还真没人知道。现在金牌在我黄某的手上,并非我赢了,大人为了大显我民神威而办的这场狮王争霸,死伤这么多人,在世人面前,其实我们都输了。

以小民之见,我们不只要练武强身,以抗外敌,最重要的还是广开民智,智武和一,那才是国富民强之道。区区一个牌子,能否改变国运,还请李大人三思,这金牌留给您作纪念吧。告辞了!

合成复用原则

Composite Reuse Principle

理论:尽量使用合成/聚合的方式,而不是使用继承(继承毕竟有耦合,父类改了子类就要改)。

实践:Service层调用Dao层,有一个Dao对象的变量,而不是继承Dao。

class Dao {}class Service /* extends Dao */{    Dao _dao;}

转载于:https://www.cnblogs.com/tigerlion/p/10662645.html

你可能感兴趣的文章
【BZOJ4516】生成魔咒(后缀自动机)
查看>>
提高PHP性能的10条建议
查看>>
svn“Previous operation has not finished; run 'cleanup' if it was interrupted“报错的解决方法...
查看>>
Java大数——a^b + b^a
查看>>
【动态规划】skiing
查看>>
java定时器的使用(Timer)
查看>>
boost 同步定时器
查看>>
[ROS] Chinese MOOC || Chapter-4.4 Action
查看>>
简单的数据库操作
查看>>
Redmine
查看>>
帧的最小长度 CSMA/CD
查看>>
编程算法 - 左旋转字符串 代码(C)
查看>>
IOS解析XML
查看>>
Python3多线程爬取meizitu的图片
查看>>
树状数组及其他特别简单的扩展
查看>>
zookeeper适用场景:分布式锁实现
查看>>
110104_LC-Display(液晶显示屏)
查看>>
httpd_Vhosts文件的配置
查看>>
php学习笔记
查看>>
普通求素数和线性筛素数
查看>>