Java设计模式学习笔记:面向对象设计7个常用原则

一、单一职责原则
一个对象应该只包含单一的职责,并且该职责被完整的封装在一个类中。

比如路边小吃摊老板那既是厨师又是收营员,不符合该原则。
二、开闭原则
软件实体应该对修改关闭,对扩展开放。

也就是说假如一个软件要增加新的功能,不需要对其原有的代码做任何修改(客户类修改小部分),只需要增加新的功能类代码即可,一般通过构建抽象层,而新的功能类实现抽象接口即可。
三、里氏代换原则
所有引用基类的地方必须能透明的使用其子类的对象

例如,程序中有“我喜欢动物”这一语句,那么将这句话改为“我喜欢狗”程序也不会出现任何异常和错误(狗是动物的子类)那么这个程序就满足该原则。
四、接口隔离原则
客户端不因该依赖哪些它不需要的端口

由于类必须重新其实现接口中的所有抽象方法,当接口中的抽象方法过于庞大时,类必须实现某些它不需要的抽象方法,从而照成浪费,这时应该分离接口中的方法,分成多个接口,比如某接口中有;接单,做菜,送外卖3个抽象方法,而某位顾客要求在店里吃的话,并不需要送外卖这个方法,但语法原则要求我们重写这个方法,这时就出现浪费,可以将这个接口分为有:接单,做菜和有:送外卖的2个接口(看起来这个例子中分离没什么必要,当然,一个庞大的接口中的方法肯定不止3个,而是很多)
五、合成复用原则
优先使用对象的组合,而不是通过继承来达到复用的目的。

比如类A想要使用类B中的某方法,可以将类B通过依赖注入到类A中来达到,而不是把类A设计为类B的子类。把实体B纳入到实体A中,实体A不需要考虑实体B的实现细节,这就是黑箱复用,而通过继承的方式来说基类的内部细节对其子类可见,为白箱复用。
六、迪米特法则
每一个软件单位对其他单位都只有最少的知识,而局限于那些与本单位密切相关的软件单位

简单的理解就是类之间少联系,比如类A、B、C、D、E、F6个类要求相互可以联系,我们不需要每一个类都关联其他剩下的5个类,(那么我们需要建立15个连接),而是建立一个中间类H,那么这6个类只需都连接H,再通过H来连接即可,只需要建立6个连接,极大的减低了耦合度。
七、 依赖倒转原则
高层模块不应该依赖低层模块,他们都应该依赖抽象,抽象不应该依赖细节,细节应该依赖抽象。

简单地说就是增加抽象层,配合这句话理解,(好吧,这个原则我也不是很理解,且看且原谅,但我觉得这句话还不错)“开闭原则是目标,里氏代换是基础,依赖倒转是目的”。比如一个炒菜类,然后一个鸡肉类,兔肉类,炒菜类能炒鸡肉和兔肉,但每次换菜都需要修改炒菜类的代码(不符合开闭原则目标,)但我们通过假如增加一个菜单接口,里面有炒菜方法,鸡肉类,兔肉类实现这个接口,并重写这个方法,(这里运用到了里氏代换原则),这里我们更换或者增加菜品类的时候就无需修改炒菜类的代码了,只需修改配置文件中的内容即可(将参数存储在配置文件中,可以参考我的另一篇博客,Java设计模式学习笔记:简单工厂模式)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值