目录
- 类之间的关系
 - 依赖
 - 泛化(继承)
 - 实现
 - 关联
 - 聚合
 - 组合
 
- 设计模式的七大原则
 - 设计模式
 - 单例
 - 工厂模式
 - 原型模式(深/浅拷贝)
 - 建造者模式
 - 适配器模式
 - 桥接模式
 - 装饰者模式
 - 组合模式
 - 外观模式
 - 享元模式
 - 代理模式
 - 模板方法模式
 - 命令模式
 - 访问者模式
 - 迭代器模式
 - 观察者模式
 - 中介者模式
 - 备忘录模式
 - 解释器模式
 - 状态模式
 - 策略模式
 - 职责链模式
 
类之间的关系
- 类之间的关系:依赖、泛化(继承)、实现、关联、聚合与组合
 
依赖
- 只要是在类中用到了对方,那么他们之间就存在依赖关系。如果没有对方,连编绎都通过不了

 
泛化(继承)

实现

关联

聚合

组合

 
 

设计模式的七大原则
- 单一职责原则
 - 接口隔离原则
 - 依赖倒转(倒置)原则
 - 里氏替换原则
 - 开闭原则
 - 迪米特法则(最少知道原则)
 - 合成复用原则
 
设计模式
单例

工厂模式

原型模式(深/浅拷贝)
- 原型模式(Prototype模式)是指:用原型实例指定后面新创建对象的种类,并且通过拷贝这些原型,创建新的对象
 - 原型模式是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象,无需知道如何创建的细节



 
建造者模式



 

适配器模式


桥接模式


 !
装饰者模式
- 装饰者模式:能够动态的将新功能附加到对象(被装饰者)上,在对象功能扩展方面,它比继承更有弹性,装饰者模式也体现了开闭原则(ocp)
 - 装饰者类和被装饰者类共同实现一个接口,被装饰者类作为装饰者类的成员属性(聚合)

 
组合模式
- 管理者类和被管理者类共同实现一个接口,被管理者类的集合作为管理者类的成员属性
 - 组合模式和装饰者模式的区别在于,虽然都要实现同一个接口,但是实现类之间的关系不同,以及装饰仅仅是一种功能上的增强,管理就包括对被管理者的增删改



 
外观模式

 

享元模式
- 将一些对象或数据以特定的方式提供给外部重复使用



 
代理模式

- 静态代理,要求代理类和被代理类共同实现同一个接口,且被代理类作为代理类的成员属性(聚合)

 - JDK动态代理,是利用JDK的API,动态的在内存中构建代理类对象,但是被代理类要实现和被代理类实现实现的相同接口,因为动态生成的代理类对象是该接口的实现类
 - Cglib动态代理,Cglib代理也叫作子类代理,它是在内存中构建一个被代理类的子类对象从而实现对目标对象功能扩展,Cglib的底层是通过使用字节码处理框架ASM来转换字节码并生成新的类 
  
- 被代理类的对象的方法如果为
final、static,那么就不会被拦截,即只会执行被代理类的对象的方法

 
 - 被代理类的对象的方法如果为
 
模板方法模式


- 钩子方法:在模板方法模式的父类中,我们可以定义一个方法,它默认不做任何事,子类可以视情况要不要覆盖它,该方法称为“钩子”


 
命令模式
- 命令模式使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活,实现解耦
 - 在命令模式中,会将一个请求(命令)封装为一个对象,以便使用不同参数来表示不同的请求(命令),同时命令模式也支持命令撤销的操作
 - 通俗易懂的理解:将军发布命令,士兵去执行
 - 其中有几个角色:将军(命令发布者)、士兵(命令的具体执行者)、命令(连接将军和士兵)
 - Invoker是调用者(将军),Receiver是被调用者(士兵),MyCommand 是命令,实现了 Command 接口,持有接收对象




 
访问者模式



迭代器模式

 
 
观察者模式



中介者模式


备忘录模式


解释器模式





状态模式


策略模式

 

职责链模式


















