面向对象设计原则的个人学习总结

断断续续看了些设计原则的文章,通过写下来加深下个人的记忆和理解~理解不一定很透彻,欢迎指正~

学习的博客:http://www.cnblogs.com/teroy/archive/2013/04/16/2757029.html

个人感觉这些设计原则都是类似的,目的都是实现松耦合 强内聚 少修改 多扩展的代码。遵循面向抽象或面向接口编程的原则。
1、里氏替换:子类能够完全替换父类,程序功能不受影响。-说白了就是在调用父类的地方可以用子类进行替换,那就必须要求父类中不能拥有私有内容,私有的内容子类是无法继承的,因此满足里氏替换原则就必须要求父类所有的字段 方法 属性等必须是非私有的,否则就不是安全的。
实际问题和解决方法:如果子类重写了父类的方法,那么子类虽然能替换父类,但是两者的行为已经不同了,就不能满足里氏替换,改变了程序功能。因此可以用接口和抽象类做父类,不提供具体的实现,将细节的实现放在子类中。这样就满足里氏替换原则了。这里面牵扯继承的本质,如果理解了那个,这个就很好理解。
2、单一职责原则:就是某一个类最好只有一个能引起变化的项。一个类不要具有过多的行为,实际情况中就是,写代码将一个页面的行为都放在一个类中,为了满足单一职责,可以将这些行为,分一下类,通过不同的类实现不同的接口来调用,能减少后期维护的工作量。
3、依赖倒置原则:高层不依赖底层,两者应该依赖抽象(接口或抽象类);抽象不依赖细节,细节应该依赖抽象。
理解:为了实现松耦合,减少对象间的依赖,项目达到少修改原有的,多扩展的原则。比如客户端调用具有某一行为的类A,如果A改变了,客户端也需要修改,改为客户端调用某一接口或抽象类,A实现该接口或继承改抽象类,就能减少客户端对A的依赖,改为依赖接口或抽象类了。通过控制反转实现依赖倒置,依赖注入可以实现控制的反转。

这个是大神的文章:http://blog.csdn.net/qqlinke/article/details/6303689\\http://www.cnblogs.com/kinglongdai/p/3269049.html

这是一个依赖注入的例子:http://www.cnblogs.com/yangecnu/p/Introduce-Dependency-Injection.html

个人理解:比如A需要调用B,A依赖B,一般情况下的做法是在A中直接new一个B,这样A会对B产生依赖,耦合高,如果后期需要更改B,A也需要变动。遵循依赖倒置的原则的话,A应该依赖于一个B继承的抽象类C或实现的接口D,B去实现接口D或继承抽象类C,那么扩展的时候只需要将新添加的类E实现接口D或继承抽象类C就可以,那么A将不再依赖于B,但是A和底层还是耦合过高,因为在A中必须new一个C或者通过工厂模式等返回一个实现D的类,想要实现完全的依赖倒置,那就要通过控制反转,A不再主动获取B,而是等待B的实例,先要实现控制反转,那么就需要通过依赖注入的方式,需要一个外部容器IOC,在容器中对B进行获取和实例化,然后再通过构造注入 属性注入 方法注入等方式(A获取的参数类型就是C或D,依赖抽象,不依赖细节,这个地方牵扯到里氏替换原则,注入的B是否能够完全替换C,接口的话就不用考虑这个),将B注入到A,那么就实现了控制反转,也就符合了依赖倒置的原则。

依赖倒置是原则,控制反转是思想,依赖注入是设计模式或方法。最根本的目的都是减少对象间的依赖,进行解耦。


4、开放封闭原则:就是对项目实现少修改原有的,易扩展的目的。维护项目时,如果要添加新功能等,最好通过添加新的类来实现,而不是修改原有的类。
实现方法:让类依赖于抽象或接口,而不是具体的类,就会减少修改,这就是封闭的原则;通过面向对象编程的继承和多态,来实现行为的多样化,扩展行为,这就是开放原则。
5、接口隔离原则:感觉和单一职责原则是一个意思,只不过这个对接口实现单一职责原则,要求接口的行为具有统一性或一致性,使用多个小的专门的接口,不要使用笼统的一个打接口。如果接口的行为过多,那么实现它的类就必须实现所有的方法,可能一些行为是类不需要的。

转载于:https://www.cnblogs.com/rookiego/p/5541438.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值