三大类
创建型模式
共五种
工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式
结构型模式
共七种
适配器模式、装饰者模式、代理模式、外观模式、桥接模式、组合模式、享元模式
行为型模式
共十一种
策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式
七大原则
开闭原则(总原则)
对扩展开放,对修改封闭。在程序需要进行拓展的时候,不能去修改原有的代码,而是要扩展原有代码
实现原理
通过接口,抽象类,把一组相关联或者相似的业务进行抽离出来,定义好方法,编写抽象业务层
通过具体的实现类去实现接口,抽象类,重载接口/抽象类的方法,完成具体业务的实现处理
后期需要扩展新业务,只需要去实现定义好的抽象业务层类,然后编写具体的业务代码,而不去修改已有的实现业务类,从而实现了对扩展开放和修改封闭
里氏替换原则
所有引用基类对象的地方能够透明地使用其子类的对象
原则补充
里氏替换原则是对开闭原则的规范约束
基类可以出现的地方,子类一定可以出现
子类对父类的方法尽量不要重写和重载,会破坏父类定义好的规范和契约
依赖倒置原则
面向接口编程,依赖于抽象而不依赖于具体
写代码时用到具体类时,不与具体类交互,而与具体类的上层接口交互。
实现原理
// 支付购买商品
Pay pay=new AliPay();
payProduct(pay);
public void payProduct(Pay pay){
//真正支付的方法,不依赖于具体的实现类,直接调用接口方法
pay.payMoney();
}
单一职责原则
规定一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分
该原则提出对象不应该承担太多职责,如果一个对象承担了太多的职责,至少存在以下两个缺点:
- 一个职责的变化可能会削弱或者抑制这个类实现其他职责的能力;
- 当客户端需要该对象的某一个职责时,不得不将其他不需要的职责全都包含进来,从而造成冗余代码或代码的浪费。
单一职责原则的优点
单一职责原则的核心就是控制类的粒度大小、将对象解耦、提高其内聚性。如果遵循单一职责原则将有以下优点。
- 降低类的复杂度。一个类只负责一项职责,其逻辑肯定要比负责多项职责简单得多。
- 提高类的可读性。复杂性降低,自然其可读性会提高。
- 提高系统的可维护性。可读性提高,那自然更容易维护了,而且不容易牵连其他业务。
- 变更引起的风险降低。变更是必然的,如果单一职责原则遵守得好,当修改一个功能时,可以显著降低对其他功能的影响。
迪米特法则(最少知道原则)
一个类应该应该对其他类尽可能了解得最少,并且只与直接的朋友通信
从迪米特法则的定义和特点可知,它强调以下两点:
- 从依赖者的角度来说,只依赖应该依赖的对象。
从被依赖者的角度说,只暴露应该暴露的方法。
数据使用类,数据加载类,多个方式的具体获取数据
使用类和获取类是好朋友,获取类跟获取方式数据类是好朋友
DataConfig LoadConfig MysqlDataSource/RedisDataSource
配置中心需要通过配置加载类获取最新数据,但是配置加载类需求借由数据库或者Redis去真正实现获取数据
千万不要在DataConfig 直接调用 MysqlDataSource/RedisDataSource
接口分离原则
接口中不存在子类用不到却必须实现的方法,如果不然,就要将接口拆分多个
当一个接口太大时,我们需要将它分割成一些更细小的接口,使用该接口的客户端仅需知道与之相关的方法即可。每一个接口应该承担一种相对独立的角色,不干不该干的事,该干的事都要干。
在使用接口隔离原则时,我们需要注意控制接口的粒度,接口不能太小,如果太小会导致系统中接口泛滥,不利于维护。接口也不能太大,太大的接口将违背接口隔离原则,灵活性较差,使用起来很不方便。
合成复用原则
要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。
通常类的复用分为继承复用和合成复用两种,继承复用虽然有简单和易实现的优点,但它也存在以下缺点。
- 继承复用破坏了类的封装性。因为继承会将父类的实现细节暴露给子类,父类对子类是透明的,所以这种复用又称为“白箱”复用。
- 子类与父类的耦合度高。父类的实现的任何改变都会导致子类的实现发生变化,这不利于类的扩展与维护。
- 它限制了复用的灵活性。从父类继承而来的实现是静态的,在编译时已经定义,所以在运行时不可能发生变化。
采用组合或聚合复用时,可以将已有对象纳入新对象中,使之成为新对象的一部分,新对象可以调用已有对象的功能,它有以下优点。
- 它维持了类的封装性。因为成分对象的内部细节是新对象看不见的,所以这种复用又称为“黑箱”复用。
- 新旧类之间的耦合度低。这种复用所需的依赖较少,新对象存取成分对象的唯一方法是通过成分对象的接口。
- 复用的灵活性高。这种复用可以在运行时动态进行,新对象可以动态地引用与成分对象类型相同的对象。
合成复用原则的实现方法
合成复用原则是通过将已有的对象纳入新对象中,作为新对象的成员对象来实现的,新对象可以调用已有对象的功能,从而达到复用。
总结
开闭原则 对扩展开放,对修改封闭,面向接口编程
里氏替换原则 父类出现的地方,子类一样可以使用,子类尽量不要重写或者重载父类方法
依赖倒置原则 面向接口编程,依赖于抽象而不依赖于具体
单一职责原则 一个类只干一件事
迪米特法则 只跟朋友打交道,其他朋友的事情交给我认识的朋友处理吧
接口分离原则 一个接口的所有方法,如果子类不想实现其中的方法,就要拆分多个接口
合成复用原则 优先组合,其次继承