⾯向对象七⼤设计原则
七⼤原则概述
⾯向对象设计原则,主要是⽤来指导我们程序员如何去定义⼀个类或者接⼝,另外还有如何去定义类与类之间的关系。
⼀般的程序员,⽤不到⾯向对象设计原则,但是在Java领域⾥⾯,有⼀个群体很值钱:写底层框架的⼩伙伴(⾃研框架、⼆次改造开源框架)
对于⾯向对象软件系统的设计⽽⾔,在⽀持可维护性的同时,提⾼系统的可复⽤性是⼀个⾄关重要的问题,如何同时提⾼⼀个软件系统的可维护性和可复⽤性是⾯向对象设计需要解决的核⼼问题之⼀。
在⾯向对象设计中,可维护性的复⽤是以设计原则为基础的。每⼀个原则都蕴含⼀些⾯向对象设计的思想,可以从不同的⻆度提升⼀个软件结构的设计⽔平。
⾯向对象设计原则为⽀持可维护性复⽤⽽诞⽣,这些原则蕴含在很多设计模式中,它们是从许多设计⽅案中总结出的指导性原则。⾯向对象设计原则也是我们⽤于评价⼀个设计模式的使⽤效果的重要指标之⼀,在设计模式的学习中,⼤家经常会看到诸如“XXX模式符合XXX原则”、“XXX模式违反了XXX原则”这样的语句。
单⼀职责原则
官⽅定义
单⼀职责原则是最简单的⾯向对象设计原则,它⽤于控制类的粒度⼤⼩。单⼀职责原则定义如下:
单⼀职责原则(Single Responsibility Principle, SRP):⼀个类只负责⼀个功能领域中的相应职责,或者可以定义为:就⼀个类⽽⾔,应该只有⼀个引起它变化的原因。
⾥式替换原则
前情提要 - 聊聊继承性
继承性相信⼤家已经⼗分熟悉了,继承是⾯向对象的很重要的特性之⼀,其实我们今天课程要讲的⾥⽒替换原则,就是要告诉我们,在编程中,如何正确的使⽤继承,这⾥有伙伴要问了,正确的使⽤怎么解?OK,那我
们先来聊聊,分析下继承的优势和劣势
继承优势
● 提⾼代码的复⽤性( 每个⼦类都拥有⽗类的⽅法和属性 )
● 提⾼代码的可扩展性( 很多开源框架的扩展接⼝都是通过继承⽗类来完成的 )
继承劣势
● 继承是侵⼊性的( 只要继承,就必须拥有⽗类的所有属性和⽅法)
● 继承机制很⼤的增加了耦合性( 如果⼀个类被其他的类所继承,则当这个类需要修改时,必须考虑到所有的⼦类,并且⽗类修改后,所有涉及到⼦类的功能都可能产⽣故障)
⾥⽒代换原则是实现开闭原则的重要⽅式之⼀。在本实例中,在传递参数时使⽤基类对象,除此以外,在定义成员变量、定义局部变量、确定⽅法返回类型时都可使⽤⾥⽒代换原则。针对基类编程,在程序运⾏时再确定具体⼦类。
依赖倒转原则
总结
1. 开闭原则(武学总纲)
2. 单⼀职责原则
3. 接⼝隔离原则
4. ⾥式替换原则
5. 依赖倒置原则
6. 合成复⽤原则
7. 迪⽶特法则(最少认知原则)
23种设计模式
设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的⼀系列套路。它不是语法规定,⽽是⼀套⽤来提⾼代码可复⽤性、可维护性、可读性、稳健性以及安全性的解决⽅案。
设计模式概述
设计模式(Design pattern)代表了最佳的实践,通常被有经验的⾯向对象的软件开发⼈员所采⽤。
设计模式是软件开发⼈员在软件开发过程中⾯临的⼀般问题的解决⽅案。这些解决⽅案是众多软件开发⼈员经过相当⻓的⼀段时间的试验和错误总结出来的。
设计模式是⼀套被反复使⽤、多数⼈知晓的、经过分类编⽬的、代码设计经验的总结。使⽤设计模式是为了可重⽤代码、让代码更容易被他⼈理解、保证代码可靠性。
设计模式不是⼀种⽅法和技术,⽽是⼀种思想。
设计模式和具体的语⾔⽆关,学习设计模式就是要建⽴⾯向对象的思想,尽可能的⾯向接⼝编程,低耦合,⾼内聚,使设计的程序可复⽤。
学习设计模式能够促进对⾯向对象思想的理解,反之亦然。它们相辅相成。
设计模式的类型
总体来说,设计模式按照功能分为三类23种:
创建型(5种) : ⼯⼚模式、抽象⼯⼚模式、单例模式(重点)、原型模式、构建者模式
结构型(7种): 适配器模式、装饰模式、代理模式(重点) 、外观模式、桥接模式、组合模式、享元模式
⾏为型(11种): 模板⽅法模式、策略模式 、观察者模式、中介者模式、状态模式、 责任链模式 、命令模式、迭代器模式、访问者模式、解释器模式、备忘录模式
为什么要使⽤创建型设计模式?
使⽤对象的程序员,如果⾃⼰使⽤,⾃⼰new,其实是有问题的。
⽐如说,你要new的对象的构造参数有很多,那么作为使⽤者来说,构造⼀个对象,太麻烦了。万⼀出错了呢?
⽐如说,你要new的对象,是提供jar包提供给你的,你去观察jar包中应该注⼊哪些信息,才能正常使⽤,这个⼯作也很麻烦,⽽且不⼀定可以实现。