本文共 2620 字,大约阅读时间需要 8 分钟。
提高思维能力、编程能力、设计能力
程序设计更加标准化、工程化,开发效率大大提高
可读性高,可靠性强、可维护性强
一种思维、一种态度、一种进步
要理解思想
模式名称
问题
解决方案
效果 (优点和缺点)
创建型模式
单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式
结构型模式
适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式
行为型模式
模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GiKxuCq4-1615135648142)(C:\Users\ThundeRobot\AppData\Roaming\Typora\typora-user-images\image-20210307181638349.png)]
简单工厂模式
工厂方法模式
抽象工厂模式
开闭原则:一个软件的实体应当对扩展开发,对修改关闭
依赖倒转原则:要针对接口编程,不要针对实现编程
迪米特法则:只与你直接的朋友通信,而避免和陌生人通信
实例化对象不适用new,用工厂方法代替
将选择实现类,创建对象统一管理和控制,从而将调用者跟我们的实现类解耦
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sbiWQqCd-1615135648144)(C:\Users\ThundeRobot\AppData\Roaming\Typora\typora-user-images\image-20210307183421443.png)]
为什么要学习代理模式? 因为这是SpringAOP的底层 【SpringAOP和SpringMVC】
角色分析:
代理角色的好处:
缺点
加深理解
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AwJKj0cn-1615135648145)(C:\Users\ThundeRobot\AppData\Roaming\Typora\typora-user-images\image-20210307202427854.png)]
需要了解两个类
Proxy(代理)
有一个静态方法,可以创建一个实例的动态代理
java.lang.reflect.InvocationHandler(调用处理程序)
通过代理实例 调用处理程序的一个接口
// 可以当作一个工具类package com.realguo.dynamic;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class MyInvocationHandler implements InvocationHandler { private Object target; // 设置被代理的接口 public void setTarget(Object target) { this.target = target; } // 生成代理类 对象实例 public Object getProxy(){ return Proxy.newProxyInstance(this.getClass().getClassLoader(), target.getClass().getInterfaces(), this); } // 处理代理实例,并返回结果 @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // 动态代理的本质,通过使用反射机制实现!!! log(method.getName()); Object result = method.invoke(target, args); return result; } void log(String name){ System.out.println("[" + name + "]"); }}
理解
Proxy.newProxyInstance(类加载器,要实现的代理接口,InvocationHandler调用处理程序)
返回指定接口的代理类的实例,该接口将方法调用分派给指定的调用处理程序。
InvocationHandler 是 代理实例的调用处理程序 实现 的接口 ,里面有调用处理程序
动态代理的本质:
是通过反射来实现的
动态代理的好处:
饿汉模式
懒汉模式
双重锁
转载地址:http://dvsq.baihongyu.com/