记录一下学习GOF(二)

代理模式

  • 通过代理,控制对对象的访问,可以详细控制访问某个(某类)对象的方法,在调用这个方法前做前置处理,调用这个方法后做后置处理(即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

享元模式

场景:内存属于稀缺资源,不要随便浪费。如果有很多个完全相同或相似的对象,我们可以通过享元模式,节省内存。

核心:

  • 享元模式以共享的方式高效地支持大量细粒度对象的重用
  • 享元对象以共享的关键是区分了内部状态和外部状态

内部状态:可以共享,不会随环境变化而改变 外部状态:不可以共享,会随环境变化而改变

责任链模式

将能够处理同一类请求的对象连城一条链,所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求,如果能则处理,如果不能则传递给链上的下一个对象

迭代器模式

转载于:https://juejin.im/post/5b9e01fef265da0ae677306e

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值