代理模式
-
通过代理,控制对对象的访问,可以详细控制访问某个(某类)对象的方法,在调用这个方法前做前置处理,调用这个方法后做后置处理(即AOP的切面实现)
-
AOP(Aspect Oriented Programming 面向切面编程)的核心实现机制。
一个代理---》对个对象
代理更加重要
抽象角色:
- 定义代理角色和真实角色的公共对外方法。
真实角色:
- 实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用
- 关注真正的业务逻辑
代理角色:
- 实现抽象角色,是真正的角色的代理
- 将统一的控制流程放到代理角色中处理
## 动态代理
JDK中自带的动态代理 import java.lang.reflect.Proxy;
桥接模式
多层继承结构
治疗可扩展性
eg:电脑 -》 三种型号 ——》 三种品牌
使用普通继承,违反单一职责原则
可抽象为两个维度
通过一个类将两个类连接起来
Computer c = new Laptop(new Lenovo());
组合模式
使用组合模式的场景: 把整体和部分的关系用树形结构来表示,从而使客户端可以使用流的方式处理部分对象和整体对象。 组合模式核心:
- 抽象构件:定义了叶子和容器构建的共同点
- 叶子构建角色:无子叶节点
- 容器:有容器特征,可以包含叶子结点
装饰模式
避免类膨胀 车 -》 能跑的车 -》 能下水的车 ——》 又能跑又能下水的车
WaterCar wc = new Water(new FlyCar(new swimCar()));
例如IO流:
Reader r = new BufferedReader(new InputStreamReader(
new FileInputStream(
new File("/d:a.txt")))
复制代码
总结:
- 装饰模式也叫包装器模式
- 装饰模式降低系统的耦合度,可以动态的增加或删除对象的职责,并使得需要装饰的具体构建类和具体装饰类可以独立变化,以便增加新得具体构建类和具体装饰类。
优点:
- 扩宽对象功能,比继承灵活,不会导致类个数急剧增加
- 可以对一个对象进行多次装饰,创造出不同行为的组合,得到功能更加强大的对象
- 具体构建类和具体装饰类可以独立变化,用户可以根据需要自己增加新的具体构建子类和具体装饰子类
缺点:
- 产生很多小对象。大量小对象占据内存,一定程度上影响性能
- 装饰模式易于出错,调试排查比较麻烦
外观模式
迪米特法则(最少知识原则)
------- 一个软件实体应当尽可能少的与其他实体发生相互作用
封装 例如:DataBaseUtil
享元模式
场景:内存属于稀缺资源,不要随便浪费。如果有很多个完全相同或相似的对象,我们可以通过享元模式,节省内存。
核心:
- 享元模式以共享的方式高效地支持大量细粒度对象的重用
- 享元对象以共享的关键是区分了内部状态和外部状态
内部状态:可以共享,不会随环境变化而改变 外部状态:不可以共享,会随环境变化而改变
责任链模式
将能够处理同一类请求的对象连城一条链,所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求,如果能则处理,如果不能则传递给链上的下一个对象