1、设计模式分类:
- 创建型模式,共五种:
工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 - 结构型模式,共七种:
适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 - 行为型模式,共十一种:
策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
2、适配器模式:
优点和应用场景:
复用性:系统需要使用现有的类,而此类的接口不符合系统需要。那么可以通过适配器模式将这些功能更好的复用。
扩展性:在实现适配器功能的时候,可以自己定义想要的方法而不改变原来的类,从而自然的扩展系统的功能。
类适配器和对象适配器区别
类适配器,由于是继承,所以无法和源类的子类一起工作,而对象适配器可以把源类和它的子类都适配到目标接口。
类适配器可以重新定义父类的部分方法,而对象适配器就比较困难。
尽量使用对象适配器,多用 合成/聚合,少用继承。
3、代理模式:
定义及应用场景:
为其他对象提供一种代理以控制对这个对象的访问,替原对象进行一些操作,比如中介;如果已有的方法在使用时需要对原方法进行改进,比如前置检测,后置记录日志,这个时候使用代理类。
java动态代理
如果代理类程序运行前并不存在,需要在程序运行时动态生成(无需收工编写代理类源码),这时候就用动态代理
如何生成:根据java的反射机制动态生成的。
Proxy.newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler handler);
Spring的AOP就是典型的动态代理应用。
4、观察者模式:
解决的问题和应用场景
定义对象间的一种一对多的依赖关系,当一个对象的状态发生变化时,所依赖它的对象得到通知并被自动更新。此模式通常用来处理事件处理系统。
通知代替轮询。解耦观察者和被观察者,避免直接调用。